Chcę sprawdzić poprawność formatu daty na wejściu przy użyciu formatu mm/dd/yyyy
.
Znalazłem poniżej kody w jednej witrynie, a potem z nich skorzystałem, ale to nie działa:
function isDate(ExpiryDate) {
var objDate, // date object initialized from the ExpiryDate string
mSeconds, // ExpiryDate in milliseconds
day, // day
month, // month
year; // year
// date length should be 10 characters (no more no less)
if (ExpiryDate.length !== 10) {
return false;
}
// third and sixth character should be '/'
if (ExpiryDate.substring(2, 3) !== '/' || ExpiryDate.substring(5, 6) !== '/') {
return false;
}
// extract month, day and year from the ExpiryDate (expected format is mm/dd/yyyy)
// subtraction will cast variables to integer implicitly (needed
// for !== comparing)
month = ExpiryDate.substring(0, 2) - 1; // because months in JS start from 0
day = ExpiryDate.substring(3, 5) - 0;
year = ExpiryDate.substring(6, 10) - 0;
// test year range
if (year < 1000 || year > 3000) {
return false;
}
// convert ExpiryDate to milliseconds
mSeconds = (new Date(year, month, day)).getTime();
// initialize Date() object from calculated milliseconds
objDate = new Date();
objDate.setTime(mSeconds);
// compare input date and parts from Date() object
// if difference exists then date isn't valid
if (objDate.getFullYear() !== year ||
objDate.getMonth() !== month ||
objDate.getDate() !== day) {
return false;
}
// otherwise return true
return true;
}
function checkDate(){
// define date string to test
var ExpiryDate = document.getElementById(' ExpiryDate').value;
// check date and print message
if (isDate(ExpiryDate)) {
alert('OK');
}
else {
alert('Invalid date format!');
}
}
Jakieś sugestie dotyczące tego, co może być nie tak?
javascript
validation
date
matowe
źródło
źródło
{}
przycisku paska narzędzi. Tym razem zrobiłem to dla ciebie. Spróbuj również podać trochę informacji o swoim problemie: opis nie działa, jest przydatny jako rozwiązanie tego problemu.Odpowiedzi:
Myślę, że Niklas ma właściwą odpowiedź na twój problem. Poza tym myślę, że poniższa funkcja walidacji daty jest nieco łatwiejsza do odczytania:
źródło
parseInt(parts[0], 10)
. W przeciwnym razie wrzesień09
jest odczytywany jako ósemkowy iUżyłbym Moment.js za datę walidacji.
Jsfiddle: http://jsfiddle.net/q8y9nbu5/
true
wartość jest dla ścisłego kredytu analizy dla @Andrey Prokhorov, co oznaczaźródło
Do weryfikacji użyj następującego wyrażenia regularnego:
To działa dla mnie dla MM / dd / rrrr.
źródło
Wszystkie kredyty trafiają do elian-ebbing
Tylko dla leniwych zapewniam również niestandardową wersję funkcji dla formatu rrrr-mm-dd .
źródło
/^(19|20)\d\d$/
, miesiąc z/^(0[0-9]|1[0-2])$/
i dzień/^(0[1-9]|[12][0-9]|3[01])$/
przed analizą. Wtedy zadziałało dzięki./^\d{4}\-\d{1,2}\-\d{1,2}$/
potwierdzi rrrr-mm-dd lub rrrr-md jako prawdziwe, dlatego sprawdza tylko długość, a nie poszczególne części daty. Aby uzyskać dokładną długość rrrr-mm-dd, bez sprawdzania, czy rok, miesiąc i data są prawidłowe, użyj/^\d{4}\-\d{2}\-\d{2}$/
zamiast tego.Możesz użyć
Date.parse()
Możesz przeczytać w dokumentacji MDN
I sprawdź, czy wynik
Date.parse
isNaNSprawdź, kiedy zaleca się użycie
Date.parse
w MDNźródło
Wygląda na to, że działa dobrze w przypadku dat w formacie mm / dd / rrrr, na przykład:
http://jsfiddle.net/niklasvh/xfrLm/
Jedynym problemem, jaki miałem z twoim kodem, był fakt, że:
Miał spację w nawiasach, przed identyfikatorem elementu. Zmieniono to na:
Bez dalszych szczegółów dotyczących typu danych, które nie działają, nie ma nic więcej do wprowadzenia.
źródło
Funkcja zwróci wartość true, jeśli podany ciąg ma prawidłowy format („MM / DD / RRRR”), w przeciwnym razie zwróci fałsz. (Znalazłem ten kod online i trochę go zmodyfikowałem)
źródło
Oto jeden fragment do sprawdzenia prawidłowej daty:
źródło
W porządku, jeśli chcesz sprawdzić walidację dd / MM / rrrr
źródło
Znajdź w poniższym kodzie, który umożliwia przeprowadzenie walidacji daty dla dowolnego z dostarczonych formatów w celu sprawdzenia poprawności dat początkowych / od i końcowych / do. Mogłyby być lepsze podejścia, ale wymyśliłem to. Uwaga: format daty i ciąg daty idą w parze.
Poniżej znajduje się fragment kodu HTML
źródło
Większość tego kodu wyciągnąłem z innego posta znalezionego tutaj . Zmodyfikowałem go do swoich celów. To działa dobrze na to, czego potrzebuję. Może to pomóc w twojej sytuacji.
źródło
Podobna do odpowiedzi Eliana Ebbinga, ale obsługuj separatory „\”, „/”, „.”, „-”, „”
źródło
źródło
Chwila jest naprawdę dobra, aby to rozwiązać. Nie widzę powodu, aby dodawać komplikacje tylko po to, aby sprawdzić datę ... spójrz na chwilę: http://momentjs.com/
HTML:
Skrypt:
źródło
Data pierwszego ciągu jest konwertowana na format daty js i ponownie konwertowana na format łańcuchowy, a następnie jest porównywana z oryginalnym ciągiem.
źródło
źródło
To niezwykłe widzieć post tak stary na tak podstawowy temat, z tak wieloma odpowiedziami, z których żadna nie jest poprawna. (Nie mówię, że żaden z nich nie działa.)
Date.parse()
nie powinno być używane dla lokalnych ciągów dat. MDN mówi: „Nie zaleca się używania Date.parse, ponieważ do wersji ES5 parsowanie ciągów było całkowicie zależne od implementacji”. Standard wymaga (potencjalnie uproszczonego) ciągu ISO 8601; obsługa każdego innego formatu zależy od implementacji.new Date(string)
być używane, ponieważ używa Date.parse ().Oto wydajne, zwięzłe rozwiązanie bez niejawnych konwersji. Wykorzystuje chęć konstruktora Date do interpretacji 2018-14-29 jako 2019-03-01. Używa kilku nowoczesnych funkcji językowych, ale w razie potrzeby można je łatwo usunąć. Dołączyłem również kilka testów.
źródło
Javascript
JQuery
zwraca true dla prawidłowego ciągu daty.
źródło
zwraca literał
'Invalid Date'
dla dowolnego nieprawidłowego ciągu_daty.Uwaga: zobacz komentarz poniżej.
źródło
new Date("02-31-2000")
dajeThu Mar 02 2000 00:00:00 GMT-0300 (BRT)
.