Почему Javascript по-разному относится к дням и месяцам?


42

Я заметил, что в JavaScript при создании Date, месяцы основаны на нуле, а дни - нет.

Например:

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

производит 1 февраля 2012

Почему это?


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

Ответы:


50

Скорее всего, идея заключается в том, что месяцы считаются индексом в массиве названий месяцев, а дни просто «считаются».


21
Там, где это имеет смысл с точки зрения ответа, просто глупо думать, что эта логика существует уже давно, и я никогда не сомневался в этом раньше.
rlemon

2
@rlemon Тот факт, что вы никогда не подвергали сомнению эту логику, доказывает, что она имеет смысл :)
dasblinkenlight

14
FWIW, я никогда не думал, что это имеет много смысла. Обработка дат в JavaScript всегда вызывала у меня дрожь, потому что я обычно забывал такие вещи, пока не начал отлаживать странные результаты.
FrustratedWithFormsDesigner

2
FWIW, я не являюсь разработчиком внешнего интерфейса, и мне не часто приходится иметь дело с датами в Javascript, кроме случайныхnew Date().getTime()
rlemon

20
Когда дело доходит до Javascript, «вот почему они это сделали» и «это имеет смысл» - это две вещи, которые вы редко слышите вместе.
Тридус

14

Может также случиться так, что даты Javascript предназначались для имитации дат java. Java также использовала нулевой месяц с начала.

JDK API v1.0.2: Date.getMonth ()


6
И спецификация Java отражает структуру C tm. См. Также stackoverflow.com/questions/344380/…

35
Это не значит, что Java Date API - ужасно хороший пример хорошего дизайна ;-)
Joachim Sauer
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.