Javascript中这些日期之间的差异?为什么不是所有浏览器都给出相同的结果?

时间:2012-04-24 17:33:50

标签: javascript utc

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日期?

3 个答案:

答案 0 :(得分:2)

“Z”是对应于UT(又名UTC,又名GMT)的military time zone。所以基本上,'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说明符。

答案 1 :(得分: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”创建它,它将显示您所在时区的当地时间,指的是您的时区。

答案 2 :(得分: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.