Чому 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
Де це має сенс з точки зору відповіді, це дурне лайно, щоб думати, що ця логіка існує вже давно, і я ніколи раніше її не ставив під сумнів.
рлеммон

2
@rlemon Те, що ви ніколи не ставили під сумнів цю логіку, лише підтверджує, що це має сенс :)
dasblinkenlight

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

2
FWIW, я не передній кінець розробник і не часто доводиться мати справу з датами в JavaScript , за винятком інодіnew Date().getTime()
rlemon

20
Що стосується Javascript, "ось чому вони це зробили" і "це має добрий сенс" - це дві речі, які ви рідко чуєте разом.
Трид

14

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

API JDK v1.0.2: Date.getMonth ()


6
І специфікація Java відображає структуру C tm. Дивіться також stackoverflow.com/questions/344380 / ...

35
Це не означає, що Java Date API - надзвичайно хороший приклад гарного дизайну ;-)
Йоахім Зауер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.