javascript – ISO 8601日期JS解释差异 – IE / FF与Chrome

为什么IE / FF和Chrome javascript引擎differ on how to interpret这个日期格式(YYYY-MM-DDTHH:mm:ss.fff)没有时区指示符?

new Date("2015-02-18T15:43:57.803").getUTCHours()

UTC时间

Chrome: 15

IE11/FF: 21

我不明白这是因为Chrome认为它是本地的,而IE / FF则认为它是UTC?这似乎是一个Chrome错误.

有趣的是 – 在字符串的末尾附加一个“Z”告诉Chrome和IE / FF时间是UTC,他们可以同意.有没有人注意到这个javascript实现与Date的差异?

new Date("2015-02-18T15:43:57.803Z").getUTCHours()

UTC时间

Chrome: 15

IE11/FF: 15

最终 – 这是out-of-box serializer for ASP.NET Web API的结果,我认为它使用的是JSON.NET,但现在似乎是JSON.NET使用IsoDateTimeConverter的内部.

检查GlobalConfiguration.Configuration.Formatters.JsonFormatter告诉我我们正在使用JsonMediaTypeFormatter. Web API是不是开箱即用的JSON.NET序列化程序?

这对于Web API人来说是一个福音 – 至少在ASP.NET MVC中我们通过JavascriptSerializer获得了一致的日期格式(尽管是专有的 – /日期(滴答数)/)

解决方法:

ES5表示没有时区的ISO 8601格式日期应视为本地(解释has since been revised),但ed. 6 draft表示将它们视为UTC.一些脚本引擎已经实现了ed. 6,一些ES5和其余的都没有.

编辑. 6(及更高版本)与ISO 8601规范不一致.

底线是不使用Date.parse(或将字符串传递给Date构造函数),手动解析日期字符串.

上一篇:javascript – 从日期转换为ISO字符串中删除秒/毫秒


下一篇:mongoDB 时间范围查询