Несоответствие метода даты Javascript - getDate против getMonth - PullRequest
13 голосов
/ 13 марта 2012

Это вызвало у меня небольшую головную боль вчера вечером, и я хотел понять, почему метод getDate в объекте Date основан на 1 (возвращает значения от 1 до 31), в то время как метод getMonth основан на 0 (возвращает 0-11),Мне интересно, почему существует такая несогласованность в методах для одного и того же объекта.

Я понимаю, почему сейчас трудно изменить поведение, но есть ли причины, по которым он был спроектирован таким образом?

Документацию можно найти здесь: http://www.w3schools.com/jsref/jsref_obj_date.asp

Ответы [ 4 ]

21 голосов
/ 13 марта 2012

Итак, я оставил Брендану Эйчу твит, задав ему вопрос (для тех, кто не знает, что он является создателем JS), и он ответил:

@ magrangs, потому что так делал java.util.Date.

https://twitter.com/BrendanEich/status/179610205317902337

14 голосов
/ 13 марта 2012

Полагаю, месяцы основаны на 0, потому что Java делала то же самое , когда разрабатывался язык JavaScript.

РЕДАКТИРОВАТЬ Oracle удалила более старую документацию по Java, есть архивная версия этой страницы .

6 голосов
/ 13 марта 2012

Трудно сказать, но у меня есть подозрение, что Месяц основан на 0, поэтому его можно легко использовать в качестве индексатора в массиве месяцев, который содержит названия месяцев

var months = new ["Jan", "Feb", ....]
months[new Date().getMonth()];
4 голосов
/ 13 марта 2012

В JavaScript счетчики начинаются с нуля.

Месяцы не обязательно должны быть представлены цифрой.«Месяцы» - это исчисляемая последовательность.Первый элемент этой последовательности обозначен нулем.

В реальной жизни дни представлены фиксированной цифрой.Хотя дни также исчисляются, было бы крайне сложно представить первый день как нулевой день.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...