javascript - new Date()在Chrome和Firefox中的工作方式不同

我想通过javascript将日期字符串转换为'2013-02-27T17:00:00',请使用下面的代码:

var date = new Date('2013-02-27T17:00:00');
alert(date);

'2013-02-27T17:00:00'是来自服务器的JSON对象的UTC时间。

但上述代码的结果在Firefox和Chrome之间有所不同:

Firefox返回:

Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time)

Chrome返回:

Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time) 

这是不同的1天,我期望的正确结果是Chrome的结果。

演示代码:[http://jsfiddle.net/xHtqa/2/]

如何解决这个问题以从两者中获得相同的结果?

cuongle asked 2019-09-11T07:32:36Z
5个解决方案
63 votes

UTC的正确格式为2013-02-27T17:00:00Z(Z代表祖鲁时间)。 如果不存在,请附加Z以获取正确的UTC日期时间字符串。

Petr Abdulin answered 2019-09-11T07:32:55Z
28 votes

是的,不幸的是,日期解析算法依赖于实现。 从Date.parse(由Date.UTC使用)的规格:

String可以解释为本地时间,UTC时间或某个其他时区的时间,具体取决于String的内容。 该函数首先尝试根据日期时间字符串格式(15.9.1.15)中调出的规则来解析字符串的格式。 如果String不符合该格式,则该函数可以回退到任何特定于实现的启发式或特定于实现的日期格式。

要使Date.UTC构造函数不(可能)使用本地时区,请使用带有时区信息的日期时间字符串,例如 Date.UTC.但是,很难找到每个浏览器可靠解析的格式 - IE <8不能识别ISO格式(请参阅JavaScript:哪些浏览器支持使用Date.parse解析ISO-8601日期字符串)。 更好的是,使用unix时间戳,即自unix epoch以来的毫秒数,或使用正则表达式将字符串分解为其部分,然后将其提供给Date.UTC

Bergi answered 2019-09-11T07:33:33Z
3 votes

我在这里发现了一件事。 看来原生的Firefox Inspector Console可能有一个错误:如果我在本机Inspector中运行“new Date()”,它会显示一个错误的时区,GMT语言环境的日期,但在Firebug Extension Console中运行相同的命令,显示的日期使用我的正确时区(GMT-3:00)。

Sergio Abreu answered 2019-09-11T07:33:58Z
0 votes

尝试使用moment.js。 与所有浏览器类似,它非常好用。 附带许多格式选项。 使用时刻('日期')。格式(“”)而不是新日期('日期')

MSIslam answered 2019-09-11T07:34:22Z
-1 votes

注意到FireFox没有返回与Chrome相同的结果。 看起来你在日期的kendo.toString中使用的格式有所不同。

最后的控制台结果是我需要的:

enter image description here

MJ Storm answered 2019-09-11T07:34:53Z
translate from https://stackoverflow.com:/questions/15109894/new-date-works-differently-in-chrome-and-firefox