Pourquoi en Javascript les mois vont-ils de 0 à 11 ?

welcomattic

Pourquoi en Javascript les mois vont-ils de 0 à 11 ?

var firstOfSeptember = new Date('2017-09-01');
console.log(firstOfSeptember.getMonth()); // 8

C'est visiblement un héritage de Java 1.0 à l'époque où la spec Javascript ressemblait à "Il faut faire comme Java".

Why is January month 0 in Java Calendar? - Stack Overflow

Pourquoi je trouve que c'est un problème d'indexer les mois à partir de 0

En informatique, tous les tableaux sont indexés à partir de 0. Ça c'est la règle de base qui s'applique partout, dans tous (ou presque ?) les langages de programmation.

Seulement en ce qui concerne le tableau des mois de l'année, l'indexation à partir de 0 me choque. Il est admis par tous sur Terre que les mois sont numérotés de 1 à 12.

Lorsque l'on manipule des dates en programmation, c'est pour en calculer la différence entre 2, pour y ajouter ou soustraire des secondes, minutes, heures, jours, mois ou années. Ces calculs sont, la plupart du temps, fait avec des dates formatées comme 2017-09-01, et donc avec le numéro de mois indexé à partir de 1.

Pourquoi alors quand je parse une date en Javascript,

var firstOfSeptember = new Date('2017-09-01');

et que je veux en récupérer le numéro du mois avec getMonth, je me retrouve avec la valeur 8 et pas 9. getMonth signifie assez clairement : avoirMois et non avoirIndexMois. Il est évident que dans certains cas c'est très utile de pouvoir récupérer l'index du tableau des mois (lorsque l'on manipule des calendrier par exemple).

Dans ce cas pourquoi ne pas avoir 2 méthodes distinctes getMonth et getMonthIndex ?

Si en lisant ceci vous connaissez la réponse, je suis curieux de la connaitre ;)