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


94

我想将日期字符串转换为Datejavascript,请使用以下代码:

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/

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


2
那是在同一台计算机上吗?
亚伦·迪古拉

4
@Sandeep的主要要点是Chrome添加了时区偏移,而Firefox没有添加
默认语言环境

3
:@CuongLe你见过这个问题stackoverflow.com/questions/9062863/...
默认语言环境

1
Date {Wed Feb 27 2013 17:00:00 GMT+0000 (GMT)}两种方式都适合我(Linux)。
marekful

1
Nitpicker的角落:«JSON格式的UTC时间» -JSON格式?准确地说,关于JSON的一个普遍抱怨是,它根本没有定义任何日期格式。
阿尔瓦罗·冈萨雷斯

Answers:


66

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


2
谢谢。这可行。但是有一条日志说,将来会不推荐使用!有任何想法吗?
黛博拉

1
非常感谢,我已经坐了两天了,但是这篇文章解决了所有问题。
Piyal George

30

是的,不幸的是,日期解析算法与实现有关。从的规范Date.parse(由所使用new Date):

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

要使Date构造函数不(也许)不使用本地时区,请使用带有时区信息的datetime字符串,例如"2013-02-27T17:00:00Z"。但是,很难找到每个浏览器都能可靠解析的格式-IE <8无法识别ISO格式(请参阅JavaScript:哪些浏览器支持使用Date.parse解析ISO-8601 Date String)。最好使用unix时间戳,即距unix epoch以来的毫秒数,或使用正则表达式将字符串分成多个部分,然后将其输入Date.UTC


2
但是规范(15.9.1.15)实际上说:“缺席的时区偏移量的值为“ Z””-因此它不应依赖
sinelaw 2013年

12
好的,更正。在ES5.1规范中看起来像是一个错误 -意图是匹配ISO-8601,其中缺少Z表示本地时间(因此Chrome匹配ES5.1,Firefox和IE匹配ISO-8601)
sinelaw

@sinelaw:感谢您进一步调查这一点。但是,无论规格说明如何,[旧的]浏览器仍会以不同的方式进行:-)
Bergi

2
奇怪的是,使用Date.Parse与新Date修复了我遇到的问题:Chrome将日期转换为本地时区,而不是将其视为本地时区。
虚伪之王

1
@KingOfHypocrites —有点奇怪,因为使用字符串调用Date构造函数应该与使用Date.parse相同。
罗布

4

我在这里发现了一件事。似乎本机Firefox Inspector控制台可能存在一个错误:如果我在本机Inspector中运行“ new Date()”,它将显示一个带有错误时区的日期,即GMT语言环境,但在Firebug扩展控制台中运行相同的命令,该日期显示的使用我的正确时区(GMT-3:00)。


-2

尝试使用moment.js。它在所有浏览器中都运行得很好,并且运行方式相似。带有许多格式选项。使用moment('date')。format(“”)代替New Date('date')


-2

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

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

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.