Это вызвало у меня небольшую головную боль вчера вечером, и я хотел понять, почему метод getDate в объекте Date основан на 1 (возвращает значения от 1 до 31), в то время как метод getMonth основан на 0 (возвращает 0-11),Мне интересно, почему существует такая несогласованность в методах для одного и того же объекта.
Я понимаю, почему сейчас трудно изменить поведение, но есть ли причины, по которым он был спроектирован таким образом?
Документацию можно найти здесь: http://www.w3schools.com/jsref/jsref_obj_date.asp
Итак, я оставил Брендану Эйчу твит, задав ему вопрос (для тех, кто не знает, что он является создателем JS), и он ответил:
@ magrangs, потому что так делал java.util.Date.
https://twitter.com/BrendanEich/status/179610205317902337
Полагаю, месяцы основаны на 0, потому что Java делала то же самое , когда разрабатывался язык JavaScript.
РЕДАКТИРОВАТЬ Oracle удалила более старую документацию по Java, есть архивная версия этой страницы .
Трудно сказать, но у меня есть подозрение, что Месяц основан на 0, поэтому его можно легко использовать в качестве индексатора в массиве месяцев, который содержит названия месяцев
var months = new ["Jan", "Feb", ....] months[new Date().getMonth()];
В JavaScript счетчики начинаются с нуля.
Месяцы не обязательно должны быть представлены цифрой.«Месяцы» - это исчисляемая последовательность.Первый элемент этой последовательности обозначен нулем.
В реальной жизни дни представлены фиксированной цифрой.Хотя дни также исчисляются, было бы крайне сложно представить первый день как нулевой день.