94

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

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

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

但是上面代码的结果在 Firefox 和 Chrome 之间是不同的:

火狐返回:

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

铬返回:

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

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

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

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

4

5 回答 5

67

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

于 2013-02-27T10:56:51.507 回答
30

是的,不幸的是,日期解析算法是依赖于实现的。根据(由 使用)的规范Date.parsenew Date

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

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

于 2013-02-27T11:01:03.650 回答
4

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

于 2015-11-24T12:56:23.840 回答
-2

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

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

在此处输入图像描述

于 2016-08-04T22:52:52.173 回答
-3

尝试使用 moment.js。它在所有浏览器中运行得非常好并且以类似的方式运行。带有许多格式化选项。使用 moment('date').format("") 而不是 New Date('date')

于 2016-01-22T18:08:01.150 回答