new Date() works differently in Chrome and Firefox
我想通过javascript将日期字符串转换为Date,请使用以下代码:
1 2
| var date = new Date('2013-02-27T17:00:00');
alert(date); |
'2013-02-27T17:00:00'是来自服务器的JSON对象中的UTC时间。
但上述代码的结果在Firefox和Chrome之间有所不同:
Firefox返回:
1
| Wed Feb 27 2013 17:00:00 GMT+0700 (SE Asia Standard Time) |
Chrome返回:
1
| Thu Feb 28 2013 00:00:00 GMT+0700 (SE Asia Standard Time) |
这是不同的1天,我期望的正确结果是Chrome的结果。
演示代码:http://jsfiddle.net/xHtqa/2/
如何解决这个问题以从两者中获得相同的结果?
-
那是在同一台电脑上吗?
-
@defaultlocale:最新版本25.0.1364.97 m
-
@AaronDigulla:是的,firefox和chrome在同一台笔记本电脑上
-
对我来说,它在chrome中显示Wed Feb 27 2013 22:30:00 GMT+0530 (India Standard Time)和firefox Wed Feb 27 2013 17:00:00 GMT+0530 (India Standard Time)
-
@Sandeep的主要观点是Chrome增加了时区偏移,而Firefox没有
-
@CuongLe你见过这个问题:stackoverflow.com/questions/9062863/…
-
两者都是Date {Wed Feb 27 2013 17:00:00 GMT+0000 (GMT)}(Linux)。
-
@defaultlocale:谢谢,这就是我正在寻找的东西
-
Nitpicker的角落:«以JSON格式生成的UTC时间» - JSON格式? 确切地说,关于JSON的一个常见抱怨是它根本没有定义任何日期格式。
-
@Á lvaroG.Vicario:感谢指出编辑过的问题
-
可能重复(新日期('2012-12-01'))。getMonth()=== 10?
UTC的正确格式为2013-02-27T17:00:00Z(Z代表祖鲁时间)。如果不存在则附加Z以获取正确的UTC日期时间字符串。
-
谢谢。这有效。但是有一个日志说,它将来会被弃用!!!有什么想法吗?
-
生命保护.......
-
非常感谢,我已经和这个问题坐了两天,但这个帖子解决了一切。
是的,不幸的是,日期解析算法依赖于实现。从Date.parse的规范(由new Date使用):
The String may be interpreted as a local time, a UTC time, or a time in some other time zone, depending on the contents of the String. The function first attempts to parse the format of the String according to the rules called out in Date Time String Format (15.9.1.15). If the String does not conform to that format the function may fall back to any implementation-specific heuristics or implementation-specific date formats.
要使Date构造函数不(可能)使用本地时区,请使用带有时区信息的日期时间字符串,例如"2013-02-27T17:00:00Z"。但是,很难找到每个浏览器可靠解析的格式 - IE <8不能识别ISO格式(请参阅JavaScript:哪些浏览器支持使用Date.parse解析ISO-8601日期字符串)。更好的是,使用unix时间戳,即自unix epoch以来的毫秒,或者使用正则表达式将字符串分解为其部分,然后将这些字符串输入Date.UTC。
-
但规范(15.9.1.15)实际上说:"缺席时区偏移的值是"Z"" - 因此它不应该依赖于实现
-
好的,纠正。看起来像ES5.1规范中的错误 - 意图是匹配ISO-8601,其中缺少Z意味着本地时间(因此Chrome匹配ES5.1,Firefox和IE匹配ISO-8601)
-
@sinelaw:感谢您进一步调查这一点。但是,无论规范如何规定,[旧]浏览器仍然采用不同的方式:-)
-
@sinelaw:你能加上答案吗?这一点很重要
-
奇怪地使用Date.Parse与新的Date修复了我在Chrome将日期转换为本地时区的问题,而不是将其视为当地时区。
-
@ KingOfHypocrites - 这有点奇怪,因为用字符串调用Date构造函数应该与使用Date.parse相同。
我在这里发现了一件事。看来原生的Firefox Inspector Console可能有一个错误:
如果我在本机Inspector中运行"new Date()",它会显示一个错误的时区,GMT语言环境的日期,但在Firebug Extension Console中运行相同的命令,显示的日期使用我的正确时区(GMT-3:00) 。
尝试使用moment.js。与所有浏览器类似,它非常好用。附带许多格式选项。使用时刻('日期')。格式(")而不是新日期('日期')
注意到FireFox没有返回与Chrome相同的结果。看起来你在日期的kendo.toString中使用的格式有所不同。
最后的控制台结果是我需要的: