Конструктор дат
Что не так?
String(new Date(2015, 0)) === String(new Date('2015-01')) // false
Первое января, которое создаётся конструктором new Date
из нескольких аргументов не равно первому
января, созданному конструктором new Date
из строки в ISO-формате.
Почему так?
А что же создаётся в том и другом случае?
String(new Date(2015, 0)) // "Thu Jan 01 2015 00:00:00 GMT+0300"
String(new Date('2015-01')) // "Thu Jan 01 2015 03:00:00 GMT+0300"
Ух ты. Смещение часового пояса. Друг мой, а почему ж ты в одном случае учитываешься, а во втором — нет?
Обратимся к документации, там наверняка есть логичное объяснение.
Обратите внимание: если функция
© MDNDate
вызывается в качестве конструктора с более чем одним аргументом, то указанные аргументы интерпретируются как локальное время. Если аргументы указывают время в UTC, используйтеnew Date(Date.UTC(...))
с теми же аргументами.
Иными словами
Что же делать?
Читать документацию, работать с датами только одним из этих способов, либо черёз обёртки.