Chrome 58.0.3029.110版本未在正确的本地时区转换日期

时间:2017-05-22 14:18:57

标签: javascript google-chrome date timezone

Chrome在日期转换时未提供正确的结果:

日期:“2017-05-22T14:00:00”

在Chrome控制台中执行此操作:

new Date("2017-05-22T14:00:00");

输出是:

Mon May 22 2017 14:00:00 GMT+0530 (IST)

这是错误的,因为我在IST。应该将输出视为

Mon May 22 2017 19:30:00 GMT+0530 (IST) 

Safari正在给出正确的结果。 Chrome就在此之前,但我认为最新的更新存在问题。

发现在日期字符串中附加Z会产生正确的日期值。

new Date("2017-05-22T14:00:00Z");

1 个答案:

答案 0 :(得分:2)

正在正确解释输入值。 ECMAScript 2015(ES6)第20.3.1.16节声明:

  

如果没有时区偏移,日期时间将被解释为当地时间

这也符合ISO-8601标准。

在以前版本的ECMAScript中,假定没有提供偏移时使用UTC。这违反了ISO-8601,并且在各种环境中实施不一致。

如果想要将输入解释为UTC,那么您应该提供一个偏移量,+00:00Z作为输入字符串的一部分。

然而,如果您正在讨论在登录到调试控制台时应如何显示Date对象,则未在规范中定义。在某些环境中,您会看到date.toString()的输出,它以非标准格式显示本地日期和时间,而在其他环境(例如FireFox)中,您将看到date.toISOString()的输出,以ISO-8601格式显示UTC日期和时间。

没有关于要显示哪些内容的规范,因此要么是有效的。如果要查看特定输出,请不要只记录Date对象,在返回字符串的对象上调用函数并记录该字符串。