Powiel możliwe:
Detecting an “invalid date” Date instance in JavaScriptJavaScript wykrywania Aktualny Daty
używałem następujących wykryć poprawną datę:
var text = $('#Date').val();
var date = Date.parse(text);
if (isNaN(date)) {
// Invalid date
}
Ale okazało się, że Date.parse myśli następujące ważne daty (mm/dd/rrrr)
- 2/30/2011
- 11/31/2011
Każdy inny sposób wykryć nieprawidłowe daty, gdy liczba dni przewyższa łączną liczbę dni w miesiącu?
AKTUALIZACJA: Jeszcze większym problemem jest to, że wtyczka sprawdzania poprawności jQuery nie wykrywa tego jako niepoprawnej daty!
ROZWIĄZANIE:
podstawie @ komentarze Guffa za Stworzyłem następującą funkcję do sprawdzania dat:
function validDate(text) {
var date = Date.parse(text);
if (isNaN(date)) {
return false;
}
var comp = text.split('/');
if (comp.length !== 3) {
return false;
}
var m = parseInt(comp[0], 10);
var d = parseInt(comp[1], 10);
var y = parseInt(comp[2], 10);
var date = new Date(y, m - 1, d);
return (date.getFullYear() == y && date.getMonth() + 1 == m && date.getDate() == d);
}
Date.parse uważa, że nie są one poprawne, ale przekształca je we właściwe daty. Na przykład. '2/30/2011' zakończy się jako' 03/02/2011' – Andreas
po głosowaniu, aby zamknąć jako dupe, zrozumiałem, że podane pytanie jest * nie * identyczne, chociaż jest powiązane. – zzzzBov
Ponieważ potrzebowałem obsługiwać dane wejściowe w wielu lokalizacjach, zaimplementowaliśmy nasz własny parser daty. Jedyny sposób, w jaki wykryliśmy ten błąd, to porównanie ciągu miesiąca, który przeanalizowaliśmy z miesiącem, który pochodzi z wygenerowanej daty. –