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.