首先,我认为时区可能与此有关。我在美国东部时间/美国东部时间。另外,我正在 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
比dateFromNumbers
这种情况早 5 小时(EST 是 GMT - 5,我确信它以某种方式相关)。
它似乎会影响 10 月到 12 月的月底。这是一个小提琴,可以很容易地看出哪些日子不同(除非你是红绿色盲,在这种情况下可能很难看到,我很抱歉)。
是什么赋予了?
笔记:
- 您可以将系统时区设置为 EST/EDT 以查看我所看到的 jsfiddle 示例。
- 日期的月份数字是从零开始的;这
11
不是错字。 - 这个问题出现在我检查的每一年。