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");
答案 0 :(得分:2)
正在正确解释输入值。 ECMAScript 2015(ES6)第20.3.1.16节声明:
如果没有时区偏移,日期时间将被解释为当地时间。
这也符合ISO-8601标准。
在以前版本的ECMAScript中,假定没有提供偏移时使用UTC。这违反了ISO-8601,并且在各种环境中实施不一致。
如果想要将输入解释为UTC,那么您应该提供一个偏移量,+00:00
或Z
作为输入字符串的一部分。
然而,如果您正在讨论在登录到调试控制台时应如何显示Date
对象,则未在规范中定义。在某些环境中,您会看到date.toString()
的输出,它以非标准格式显示本地日期和时间,而在其他环境(例如FireFox)中,您将看到date.toISOString()
的输出,以ISO-8601格式显示UTC日期和时间。
没有关于要显示哪些内容的规范,因此要么是有效的。如果要查看特定输出,请不要只记录Date
对象,在返回字符串的对象上调用函数并记录该字符串。