Dlaczego JavaScript traktuje dni i miesiące inaczej?


42

Zauważyłem, że w JavaScript, podczas tworzenia Date, miesiące są zerowe, a dni nie.

Na przykład:

var foo = new Date(2012, 1, 1)

produkuje 1 lutego 2012 r

Dlaczego to?


6
months = ['Jan', 'Feb',..., 'Nov', 'Dec']; month = months[date.getMonth()];
zzzzBov

Odpowiedzi:


50

Najprawdopodobniej chodzi o to, że miesiące są traktowane jako indeks w tablicy nazw miesięcy, podczas gdy dni są po prostu „liczone”.


21
Tam, gdzie ma to sens z punktu widzenia odpowiedzi, szaleństwem nietoperzy jest myśleć, że ta logika istnieje od jak dawna i nigdy wcześniej jej nie kwestionowałem.
rlemon

2
@rlemon Fakt, że nigdy wcześniej nie kwestionowałeś tej logiki, tylko dowodzi, że ma ona sens :)
dasblinkenlight,

14
FWIW, nigdy nie myślałem, że to ma sens. Przetwarzanie dat w JavaScript zawsze sprawiało, że wzdrygałem się, ponieważ zwykle zapominałem o takich rzeczach, dopóki nie zacząłem debugować dziwnych wyników.
FrustratedWithFormsDesigner

2
FWIW, nie jestem front-endowym deweloperem i nie muszę często zajmować się datami w Javascript oprócz okazjonalnychnew Date().getTime()
rlemon

20
Jeśli chodzi o JavaScript, „dlatego to zrobili” i „to ma sens” to dwie rzeczy, które rzadko słyszy się razem.
Tridus

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.