0
var dt = new Date("2012-04-23T12:00:00");

var dtz = new Date("2012-04-23T12:00:00Z");

如果 Z 存在,我会得到不同的时间。

当 Z 存在时,它将日期转换为浏览器的本地时间,而当它不存在时,假设它已经在本地时间?

我在 FF 中得到的结果与 Chrome 不同。Chrome 总是给我同样的时间。FF 将它们视为不同。我应该如何处理来自服务器的 UTC 日期?

4

3 回答 3

2

“Z”是对应于 UT(又名 UTC,又名 GMT)的军事时区。所以基本上,'nnn Z'的意思是“当格林威治的'nnn'时,你的时区有多晚”。例如,我在CEST是 GMT+2 所以这个

new Date("2012-04-23T12:00:00Z")

为我返回:

Mon Apr 23 2012 14:00:00 GMT+0200 (CEST)

至于带有 TZ 说明符的日期,它们在 Firefox(假定为本地 TZ)和 Chrome(假定为 UTC)中的处理方式似乎有所不同。为了安全起见,我建议始终使用显式 TZ 说明符。

于 2012-04-24T17:52:35.173 回答
1
var dt = new Date("2012-04-23T12:00:00");

var dtz = new Date("2012-04-23T12:00:00Z");

用 alert() 试了一下,得到了这些消息

警报(dt);

 Mon Apr 23 2012 12:00:00 GMT+0500 (West Asia Standard Time)

警报(dtz);

Mon Apr 23 2012 17:00:00 GMT+0500 (West Asia Standard Time)

这意味着如果您创建没有“Z”的日期,它将返回浏览器在 GMT 的本地时间,说明您的时区低于或高于 GMT

如果您使用“Z”创建它,它将显示您所在时区的当地时间,参考您所在的时区。

于 2012-04-24T17:45:36.347 回答
0

根据 ISO 8601,如果没有给出带有时间表示的 UTC 关系信息,则假定时间为本地时间。

如果可以在 Firefox、Safari 和 Internet Explorer 上验证正确的行为:

以下应返回:false

new Date("2014-05-09T22:12:18.893Z").valueOf() === new Date("2014-05-09T22:12:18.893").valueOf()

如果您在 Chrome 或 Opera 上尝试相同的操作,它会错误地指示:true

这个故事的寓意是,如果您有上述格式的字符串,请在末尾添加一个 Z。

于 2014-05-09T22:14:35.320 回答