Pourquoi Javascript traite-t-il les jours et les mois différemment?

42

J'ai remarqué qu'en JavaScript, lors de la création d'un Date, les mois sont basés sur zéro et les jours ne le sont pas.

Par exemple:

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

produit le 1er février 2012

Pourquoi est-ce?

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

Réponses:

50

L'idée la plus probable est que les mois sont considérés comme un index dans un tableau de noms de mois, alors que les jours sont simplement "comptés".

Thorsten Müller
la source
21
Lorsque cela semble logique du point de vue de la réponse, il est insensé de penser que cette logique existe depuis combien de temps et que je ne l’avais jamais mise en doute auparavant.
rlemon
2
@rlemon Le fait que vous n'ayez jamais mis en doute cette logique auparavant prouve seulement que cela a du sens :)
dasblinkenlight 13/12/2012
14
FWIW, je n'ai jamais pensé que cela avait beaucoup de sens. Le traitement des dates en JavaScript était toujours quelque chose qui me faisait frémir, car j'oubliais généralement de telles choses jusqu'à ce que je commence à déboguer des résultats étranges.
FrustratedWithFormsDesigner
2
FWIW, je ne suis pas un développeur front-end et n'ai pas souvent à traiter des dates en Javascript, à l'exception de temps à autrenew Date().getTime()
rlemon
20
"C’est pourquoi ils l’ont fait" et "cela fait sens" sont deux choses que vous entendez rarement ensemble.
Tridus
14

Il se peut également que les dates Javascript aient été conçues pour imiter les dates java. De même, Java a utilisé un mois de base zéro depuis le début.

JDK API v1.0.2: Date.getMonth ()

Danny Kirchmeier
la source
6
Et la spécification Java reflète la structure C tm. Voir aussi stackoverflow.com/questions/344380/…
35
Cela ne veut pas dire que l'API Java Date est un très bon exemple de bon design ;-)
Joachim Sauer