我有两个日期都采用有效的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对象?
答案 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());
要解析有问题的格式,请在解析之前添加缺少的冒号,或者(最好)编写自己的解析函数(并不困难)或使用库(有很多不错的选择)。