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

时间:2013-02-27 10:36:39

标签: javascript date timezone

我想通过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) 

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

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

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

5 个答案:

答案 0 :(得分:65)

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

答案 1 :(得分:29)

是的,遗憾的是,日期解析算法依赖于实现。来自specification of Date.parse(由new Date使用):

  

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

要使Date constructor不(可能)使用本地时区,请使用带有时区信息的日期时间字符串,例如: "2013-02-27T17:00:00Z"。但是,很难找到每个浏览器可靠解析的格式 - IE< 8(见JavaScript: Which browsers support parsing of ISO-8601 Date String with Date.parse)无法识别ISO格式。更好的是,使用unix时间戳,即unix epoch后的毫秒,或者使用正则表达式将字符串分解为部分,然后将其提供给Date.UTC

答案 2 :(得分:3)

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

答案 3 :(得分:-1)

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

答案 4 :(得分:-2)

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

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

enter image description here