字符串中的日期在不同浏览器中产生不同的日

时间:2014-04-21 22:20:52

标签: javascript date browser

var d = "2014-04-22";
var t = "00:00";
var o = new Date(d + "T" + t);

Firefox会生成正确的日期:Tue Apr 22 2014 00:00:00 GMT+0200 (CEST)

另一方面,Chrome会产生:Tue Apr 22 2014 02:00:00 GMT+0200 (CEST)

如果我用空格替换T,则Chromes o包含正确的日期,但它在Firefox中为Invalid Date

如何让两个浏览器使用正确的日期?

编辑: t = "00:00:00.000Z"会在两个浏览器中产生Tue Apr 22 2014 00:00:00 GMT+0200 (CEST),但这是错误的日期。

编辑: t = "00:00:00.000+02:00"会产生正确的时间,但是时区无法从浏览器运行的计算机上自动获取?

1 个答案:

答案 0 :(得分:1)

请参阅Date.Parse文档和ISO8601的文档。

Chrome和Firefox似乎确实以不同方式处理时区。在我的测试中,如果你附加一个明确的时区指示符,它们表现得很好。要么" Z" (UTC的特殊标记)或"+hh:mm",具体取决于您想要的输出。

如果你想拥有一个更灵活的日期解析器(这对许多其他东西很有用),你可以使用某种类型的库 - MomentJSDateJS可以很好地完成。选择哪个取决于个人偏好以及除此之外你所做的事情的细节。

编辑:我的原始答案是错误的,因为ISO8601确实只接受HH:MM,Chrome和Firefox对非时区指定的代码确实有不同的行为。