新的Date()在Chrome和Firefox中的工作方式不同

我想通过JavaScript将日期字符串转换为Date ,使用下面的代码:

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) 

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

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

我怎样才能解决这个问题,从两个方面得到相同的结果?


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


是的,不幸的是日期分析算法依赖于实现。 从Date.parse的规范(由new Date ):

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

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


我在这里找到了一件事。 看起来本地的Firefox Inspector控制台可能有一个错误:如果我在本机Inspector中运行“new Date()”,它会显示错误的时区,GMT区域设置的日期,但在Firebug扩展控制台中运行相同的命令,日期显示使用我的正确时区(GMT-3:00)。

链接地址: http://www.djcxy.com/p/96277.html

上一篇: new Date() works differently in Chrome and Firefox

下一篇: Why are function declarations handled differently in different browsers?