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