2011-07-23 11 views
6

Otrzymuję trzy zmienne przez dane wejściowe użytkownika, które zawierają rok daty, miesiąca i dnia. Już sprawdziłem, czy miesiąc var zawiera się w przedziale 1-12 i tak dalej.Sprawdź datę w JavaScript

Teraz chcę sprawdzić, czy jest to prawdziwa data, a nie data, która nie istnieje, jak 31-06-2011.

Moim pierwszym pomysłem było stworzenie nowej daty instancję:

var year = 2011; 
var month = 5; // five because the months start with 0 in JavaScript - June 
var day = 31; 
var myDate = new Date(2011,5,31); 
console.log(myDate); 

Ale MyDate nie zwraca fałsz, bo to nie jest ważna data. Zamiast tego zwraca "piątek 01 lipca 2011 [...]".

Jakieś pomysły na sprawdzenie nieprawidłowej daty?

+0

Witamy w Stack Overflow, dotweb! Proszę nie umieszczać tagów w tytule, dzięki! –

+0

Co? Nie rozumiem, przepraszam. –

+0

Tagi należą do tagów, [nie w tytule] (http://meta.stackexchange.com/questions/66152/titles-to-to-relevant-tag-be-included-in-the-title) . –

Odpowiedz

11

Spróbuj tego:

if ((myDate.getMonth()+1!=month)||(myDate.getDate()!=day)||(myDate.getFullYear()!=year)) 
    alert("Date Invalid."); 
+0

Dzięki! dobry pomysł. –

+0

Wystarczy tylko sprawdzić dwa komponenty, ale wszystkie trzy nie boli. :-) – RobG

0

Można ewentualnie zrobić to, co robisz teraz i wybudować nowy obiekt Date, a następnie potem sprawdzić wartość myDate.getFullYear(), myDate.getMonth(), myDate.getDate(), aby upewnić się, że wartości te są zgodne z wartościami wejściowymi. Należy pamiętać, że getMonth() i getDate() są 0 indeksowane, więc Styczeń to miesiąc 0 i grudzień to miesiąc 11.

Oto przykład:

function isValidDate(year, month, day) { 
    var d = new Date(year, month, day); 

    return d.getFullYear() === year && d.getMonth() === month && d.getDate() === day; 
} 

console.log(isValidDate(2011,5,31)); 
console.log(isValidDate(2011,5,30)); 
5
if ((myDate.getDate() != day) || 
    (myDate.getMonth() != month - 1) || 
    (myDate.getFullYear() != year)) 
{ 
    return false; 
} 

JavaScript właśnie konwertuje wpisane w Date konstruktor month, year, day, itp. w prostej wartości int (milisekundach), a następnie formatuje go do reprezentowania w formacie ciągu znaków. Możesz stworzyć new Date(2011, 100, 100) i wszystko będzie dobrze :)

0

Myślę, że to prawda.

function isValidDate(year, month, day) {  
     var d = new Date(year, month, day); 
     if(month == 12){ 
      year = parseInt(year)*1+1*1; 
      month = 0; 
     } 
     day = parseInt(day); 
     month = parseInt(month); 
     year = parseInt(year); 
     if(month === 2 && day > 29){ 
      return false; 
     } 
     return d.getFullYear() === year && d.getMonth() === month && d.getDate() === day; 
    } 
+1

Ehm, odpowiedziano już ponad pół roku temu! W każdym razie dzięki. –

Powiązane problemy