new Date()兼容Safari、Chrome、Firefox。解决safari浏览器NaN或者Invalid Date问题。

Navigator 对象包含有关浏览器的信息。

navigator.userAgent 返回由客户机发送服务器的 user-agent 头部的值。
里边包含了浏览器的名字,
safari包含的值是Safari。
chrome包含的值是Chrome。
firefox包含的值是Firefox。

这三个浏览器都兼容的格式是:Date.parse("2018-01-11T20:00:00");

如果格式是"2018-01-11 20:00:00",我们可以直接替换空字符

let data =  "2018-01-11 20:00:00";
new Date(data.replace(/\s/g, 'T'));
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");

你可能感兴趣的:(new Date()兼容Safari、Chrome、Firefox。解决safari浏览器NaN或者Invalid Date问题。)