2010-02-26 8 views
9

Dlaczego na ziemi robi ten kod:Javascript: data zależy od kolejności specyfikacji pola? Naprawdę?

var a = new Date();        
var b = new Date();  

a.setDate(31); 
a.setMonth(11); 
a.setFullYear(2009); 

b.setFullYear(2009); 
b.setMonth(11); 
b.setDate(31); 

ouputs poprawnie 31 grudnia 2009 r b a 3 grudnia 2009 roku: -O pod kątem? Nie w przeglądarce MyHorribleScrap w wersji 6.6.6, ale OBU na FF 3.6 i IE 8.06.6001

+0

Co na ziemi jest MyHorribleScrap? –

Odpowiedz

14

Dlatego zaleca się używanie konstruktora Date z argumentami.

Co się dzieje, jest po instancję obiektu Date, pobiera aktualną datę (dzisiaj, 26 lutego) i luty ma tylko 28 dni, kiedy można ustawić datę, setDate(31), to przeskakuje do 3 marca

zalecany sposób:

var a = new Date(2009, 11, 31); 
// new Date(year, month, date [, hour, minute, second, millisecond ]); 
+0

+1 .. cholera, jesteś szybki ...: p –

+0

Cóż, zgadzam się, luty to zły miesiąc, ale ja ustalałem datę w grudniu ... tak, dzięki – Daniel

+0

Dobra odpowiedź. Po prostu chciałem dodać 'Date()' zwraca dzisiejszą datę, dlatego właśnie jest w lutym. Gdybyś zrobił to w marcu, błąd nie pojawiłby się. . . aż do krótszego miesiąca. Yikes. –

0

ja practicly pisanie Tim's odpowiedź =/

Najpierw ustawić rok (bo może to być rok przestępny), a następnie miesiąc i wreszcie de data , ale najlepszą praktyką jest używanie konstruktor Data (rok, miesiąc, data), ale nie zawsze chce tego robić.

+0

Jak już powiedziałem do Daniela, ustalając Rok, to miesiąc, a następnie data nie zapobiegnie tym niedopasowaniom w niektórych przypadkach, np. Załóżmy, że dzisiaj jest 31 grudnia 2009, i chcesz ustawić datę na 01 lutego 2010, ty Zmień Rok, wszystko co Ok, masz teraz 31 grudnia 2010 r., teraz zmienisz miesiąc, w którym skończysz 31 lutego 2010 r., który ustąpi do 3 marca, a skończysz z Mar 01 2010 – CMS

+0

masz rację, konstruktor jest "najbezpieczniejszy" sposób. We wszystkich przypadkach. – gonxalo

Powiązane problemy