2009-05-07 11 views
10

Próbowałem uzyskać dzień tygodnia z funkcją getDay() obiektu Date w JavaScript. Teoretycznie działa dobrze, ale czasami pojawia się opóźnienie w wynikach, więc jeśli funkcja ma zwrócić wartość "4", zwraca "1".Dlaczego getDay zwraca niepoprawne wartości? (javascript)

E.g.

var date= new Date("2009","04","30"); 
alert(date.getDay()); // the function returns 6, should return 4 

var date= new Date("2009","05","01"); 
alert(date.getDay()); // the function returns 1, should return 5 

Naprawdę nie wiem, dlaczego tak się dzieje. Ten przykład pochodzi z IE8. FF 3 zachowuje się podobnie, ale zwraca różne wartości. Pierwszy to 7, a nie 4. Drugi jest jak w IE8.

Jakieś pomysły, dlaczego tak się dzieje?

Odpowiedz

16

Ponieważ numer miesiąca opiera się na zera, a nie na jego podstawie.

new Date("2009","04","30") tworzy Date obiekt dla 30 may, a nie 30 kwietnia.

(Powodem jest to zero, oparta jest prawdopodobnie historyczny, czyli zachowuje się tak samo jak niektóre metody w inny sposób system z powrotem w czasie ...)

+0

Nie dbam o to, co jest powodem, że nie jest wystarczająco dobry. Miesiące z zerową stawką to STUPID. Ale utknęliśmy z nimi ... westchnienie ... – RolandTumble

+1

Cóż, nie wszystkie języki ... Konstruktor DateTime (int, int, int) w .NET używa jednego numeru miesiąca na podstawie. – Guffa

+1

Wielkie dzięki, nienawidzę JavaScriptu za takie głupie rzeczy ... -.- – SvenFinke

Powiązane problemy