Ответ 1
У вас возникает проблема с часовым поясом. Ваш JS-движок интерпретирует строку как UTC, так как она больше не указана. Из спецификации Date.parse
(который используется new Date
):
Строка может быть интерпретирована как локальное время, время UTC или время в каком-либо другом часовом поясе, в зависимости от содержимого строки. Сначала функция пытается проанализировать формат строки в соответствии с правилами, выписанными в формате строки времени даты (15.9.1.15). Если String не соответствует этому формату, функция может вернуться к любой эвристике, специфичной для конкретной реализации, или к форматам дат реализации.
В вашем часовом поясе дата-время Nov 30 2012 19:00:00 GMT-0500
- в ноябре. Используйте .getUTCMonth()
, и вы получите декабрь. Однако никогда не доверяйте Date.parse
, каждый браузер делает это по-другому. Поэтому, если вы не находитесь в ограниченных средах, таких как Node.js, вы всегда должны анализировать свою строку (например, с помощью регулярного выражения) и передавать ее на new Date(Date.UTC(year, month, date, …))
.