首先,我认为时区可能与此有关。我在EST/EDT。另外,我在铬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
不是拼写错误。 - 这个问题出现在我检查的每一年。
在您的第二个案件日期是2020年11月15日和2020年12月15日。是否是错字? – Habib 2012-04-22 16:03:49
运行Chrome 18.0.1025.162 m,Windows,GMT +2:结果可重现。但明确指定字符串表示中的时间可以解决问题。我通常从字符串中避免日期,因为跨浏览器的格式支持是多种多样的,文档记录很差,毫秒更加可靠。 – DCoder 2012-04-22 16:23:47