Warum behandelt Javascript Tage und Monate unterschiedlich?

42

Ich habe festgestellt, dass beim Erstellen von in JavaScript die DateMonate auf Null basieren und die Tage nicht.

Zum Beispiel:

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

produziert am 1. Februar 2012

Warum ist das?

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

Antworten:

50

Höchstwahrscheinlich ist die Idee, dass die Monate als Index für eine Reihe von Monatsnamen gedacht sind, während Tage einfach "gezählt" werden.

thorsten müller
quelle
21
Wo dies aus der Sicht der Antwort Sinn macht, ist es verdammt verrückt zu glauben, dass es diese Logik schon seit wie langer Zeit gibt und ich sie noch nie in Frage gestellt habe.
Rlemon
2
@rlemon Die Tatsache, dass Sie diese Logik noch nie in Frage gestellt haben, beweist nur, dass es Sinn macht :)
dasblinkenlight
14
FWIW, ich hätte nie gedacht, dass es viel Sinn macht. Die Verarbeitung von Datumsangaben in JavaScript hat mich immer erschüttert, weil ich solche Dinge normalerweise vergessen habe, bis ich anfing, seltsame Ergebnisse zu debuggen.
FrustratedWithFormsDesigner
2
FWIW, ich bin kein Front-End-Entwickler und muss mich nicht oft mit Datumsangaben in Javascript auseinandersetzen, außer gelegentlichnew Date().getTime()
13.12.12
20
Wenn es um Javascript geht, sind "das ist der Grund, warum sie es getan haben" und "das ergibt einen guten Sinn" zwei Dinge, die man selten zusammen hört.
Tridus
14

Es kann auch sein, dass Javascript-Daten Java-Daten imitieren sollten. In ähnlicher Weise hat Java von Anfang an einen auf Null basierenden Monat verwendet.

JDK API v1.0.2: Date.getMonth ()

Danny Kirchmeier
quelle
6
Und die Java-Spezifikation spiegelt die C TM -Struktur wider. Siehe auch stackoverflow.com/questions/344380/…
35
Das heißt nicht, dass die Java Date API ein schrecklich gutes Beispiel für gutes Design ist ;-)
Joachim Sauer