启动Chrome 67(完整版本为67.0.3396.87),我遇到了创建新Date对象的奇怪行为。最小的可重复案例,如下所示:
<html>
<body>
<script> alert(new Date(-62135596800000)); </script>
</body>
</html>
在Firefox 60.0.2上,警告信息为:
Mon Jan 01 0001 00:00:00 GMT+0000 (GMT Standard Time)
在Internet Explorer 11和Edge 41.16299.461.0上,警报消息与Firefox相同:
Mon Jan 01 0001 00:00:00 GMT+0000 (GMT Standard Time)
但是,在Chrome 67上,我看到了:
Sun Dec 31 0000 23:58:45 GMT-0001 (Greenwich Mean Time)
修改: JsFiddle
Edit2 原来这与微软的图书馆没有任何关系。
答案 0 :(得分:4)
根据对该错误报告的响应,我认为这实际上是由于Chrome可能包含IANA时区信息。 Browsers, time zones, Chrome 67 Error
例如,当我运行那个小提琴时,我得到的Sun Dec 31 0000 18:09:24 GMT-0550 (Central Standard Time)
对应于IANA条目Zone America/Chicago -5:50:36 - LMT 1883 Nov 18 12:09:24
。
所以这是一个“功能”而不是我认为的错误。他们正在使用更“准确”的历史时间偏移,而不是历史日期的当前日期偏移。
您可以在此处查看数据:https://github.com/eggert/tz只需查找相应的世界位置文件,并尝试避开所有注释掉的行,除非您对您所在时区的历史感到好奇。
你可以做些什么来“修复”它以便显示或多或少地正确显示.toUTCString()
对象上的Date
,这会强制它到UTC时间并显示Mon, 01 Jan 0001 00:00:00 GMT
为@Pointy在最初问题的评论中指出。
答案 1 :(得分:-2)
您的代码as long as MS's one对时区一无所知,因此我认为Chrome采用默认值。
我想如果您按照以下方式创建日期应该会更好:
const date = new Date(Date.UTC(year, month, day, hour, minute, second));