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日期?
答案 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.