Создание даты с номерами (новая дата (2012, 03,...) дает неправильный месяц (+1)
При создании объекта new Date
с использованием чисел для частей значение, которое я возвращаю, в точности один месяц превышает значение, которое я вложил в "месяц".
new Date(2012, 05, 17, 00, 00, 00)
Sun Jun 17 2012 00:00:00 GMT+0800 (HKT) // june?!
Однако обычный разбор точно такой же строки возвращает правильное время:
new Date("2012-05-17 00:00:00")
Thu May 17 2012 00:00:00 GMT+0800 (HKT)
Я получаю тот же результат в ie/ff/chrome. Удаление часов/мин/сек не оказывает никакого эффекта. Я могу обойти это, вычитая один перед установкой месяца, но вместо этого я просто переключился на запись моей даты в виде строки.
Edit:
Разбор строк не работает в IE. Я понятия не имею, что я сделал, но я клянусь, что сделал эту работу. Это вопрос. почему я избегал этого в первую очередь. Я переключился на использование moment.js на данный момент.
А, теперь я понял. Точно так же, как обычные даты java, которые я не кодирую, кроме редко, и даже тогда всегда с библиотекой (joda и т.д.). Какая ужасная идея в любом случае. Вот, например, skeets задают вопрос: Почему январь месяц 0 в Java-календаре?
Почему это происходит?
Ответы
Ответ 1
Программисты начинают отсчет с 0. Таким образом, месяцы представлены 0 (Jan) -11 (Dec).
Причина, по которой дни не следуют этому правилу, заключается в том, чтобы не путать авторов с разницей 30/31 месяца.
Из MDN:
месяц
Целочисленное значение, представляющее месяц, начиная с 0 для января до 11 декабря.