Прежде всего, я думаю, что часовой пояс, вероятно, имеет какое-то отношение к этому. Я в EST/EDT. Кроме того, я тестирую это на chromium 17/linux.
Теперь, допустим, я создаю две даты:
// December 5
dateFromNumbers = new Date(2020, 11, 5);
dateFromString = new Date("2020-12-5");
Кажется, эти даты должны иметь идентичные метки времени, и они:
+dateFromNumbers == +dateFromString; // true
... по крайней мере в этом случае. Но в некоторых случаях они не делают:
// December 15
dateFromNumbers = new Date(2020, 11, 15);
dateFromString = new Date("2020-12-15");
+dateFromNumbers == +dateFromString; // false
Что здесь происходит?
dateFromNumbers; // Tue Dec 15 2020 00:00:00 GMT-0500 (EST)
dateFromString; // Mon Dec 14 2020 19:00:00 GMT-0500 (EST)
Похоже, dateFromString
на 5 часов раньше dateFromNumbers
в этом случае (EST - GMT-5, я уверен, что это так или иначе связано).
Кажется, что это касается концов месяцев с октября по декабрь. Здесь есть скрипка, которая позволяет легко видеть, в какие дни различаются (если вы не красно-зелёный дальтонизм, в этом случае это может быть трудно увидеть, мои извинения).
Что дает?
Примечания:
- Вы можете настроить системный часовой пояс на EST/EDT, чтобы увидеть пример jsfiddle, как я его вижу.
- Цифры с датами месяца основаны на нулевом значении;
11
не является опечаткой. - Эта проблема появляется каждый год, который я проверил.