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()解析字符串的格式要求。