使用缺少时区的解析日期解析

Mer*_*OWA 3 javascript datetime date

在进行一些测试时,我发现浏览器之间存在不一致的行为,并使用以下javascript

new Date("2013-09-10T08:00:00").toString()
Run Code Online (Sandbox Code Playgroud)

在IE和Firefox中,结果是

"Tue Sep 10 2013 08:00:00 GMT-0400(东部夏令时间)"

在Chrome中,结果是

"Tue Sep 10 2013 04:00:00 GMT-0400(东部夏令时)"

所以根据我对日期字符串格式的ECMA脚本的阅读,它说......

所有数字必须为10.如果缺少MM或DD字段,则使用"01"作为值.如果不存在HH,mm或ss字段,则使用"00"作为值,并且缺少sss字段的值为"000". 缺席时区偏移的值是"Z"

但是,在"new Date()"构造函数的文档中,它说

15.9.3.2新日期(价值)

  1. 设v为ToPrimitive(值).
  2. 如果Type(v)是String,那么

    一个.将v解析为日期,其方式与解析方法完全相同(15.9.4.2); 设V为该日期的时间值.

15.9.4.2 Date.parse(string)

parse函数将ToString运算符应用于其参数,并将结果String解释为日期和时间; 它返回一个Number,即与日期和时间对应的UTC时间值.String 可以解释为本地时间,UTC时间或某个其他时区的时间,具体取决于String的内容.

任何实施的想法都是正确的?

geo*_*org 5

标准冲突.ISO 8601 规定:

如果没有给出具有时间表示的UTC关系信息,则假定时间是在本地时间.

ECMA :

缺席时区偏移的值是"Z".

Mozilla开发人员认为 ISO优先,Chrome伙伴似乎不同意.

ES6的目前的草案说,(下20.3.1.15):

如果不存在时区偏移,则将日期时间解释为本地时间.

所以Mozilla的实现是(将)是正确的.