在Chrome 67上打破了新的日期()

时间:2018-06-13 15:21:58

标签: javascript

启动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 原来这与微软的图书馆没有任何关系。

2 个答案:

答案 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));