ISO-8601中的新日期引发“无效日期”

时间:2019-08-03 18:24:01

标签: javascript date safari iso8601

我有两个日期都采用有效的ISO-8601格式,并且正在尝试将它们转换为Date对象。

console.log(new Date('2019-08-03T18:17:28.119Z'));
console.log(new Date('2019-05-09T08:25:22+0000'));

Output1: Sat Aug 03 2019 20:17:28 GMT+0200 (CEST)
Output2: Invalid Date

为什么JavaScript无法将第二个日期识别为有效的ISO-8601格式?

如何创建这种格式的Date对象?

1 个答案:

答案 0 :(得分:0)

ECMA-262要求所有不符合its version of ISO 8601的内容都取决于实现。格式接近但不精确的格式可能会导致至少某些浏览器中的日期无效。其他人可能更宽容。

在这种情况下,偏移量“ +0000”应为“ +00:00”。同样,根据实现的不同,用空格替换“ T”可能会导致日期无效或不合法。

// Invalid date maybe
console.log(new Date('2019-05-09T08:25:22+0000').toString());

// valid
console.log(new Date('2019-05-09T08:25:22+00:00').toString());

要解析有问题的格式,请在解析之前添加缺少的冒号,或者(最好)编写自己的解析函数(并不困难)或使用库(有很多不错的选择)。

另请参见Why does Date.parse give incorrect results?