在iOS Safari,JavaScript使用Date.parse或Date()转换日期返回NaN或Invalid Date

时间:2021-08-24 16:12:00

Chrome

>Date.parse("2018-01-11 20:00:00");
1515672000000

Safari

>Date.parse("2018-01-11 20:00:00");
NaN

同样的日期字符串在Chrome解析正确,而在Safari返回NaN。

这个主要原因是Safari要求Date.parse()或Date()转换日期的字符串需要满足RFC2822 或ISO 8601定义的格式。

ISO 8601定义的格式

YYYY-MM-DDThh:mm:ss.sTZD

如果字符串不满足格式,Date.parse()返回NaN,new Date()返回Invalid Date对象。

与例子里的字符串相比,ISO 8601要求在日期和时间之间需要使用字符“T”隔开。

如果兼容Safari,Chrome,Firefox以及IE等,可以改为

>Date.parse("2018-01-11T20:00:00");

时区

可以注意到字符串“2018-01-11T20:00:00”是没有时区信息的,默认情况下它会被转换为本地时区的时间。

如果需要使用UTC时间,可以在最后加上Z。

表示东8区晚上8点的UTC时间

>Date.parse("2018-01-11T12:00:00Z");

ISO 8601格式的使用可以参考:Date.parse()或new Date()解析字符串的格式要求