問題復(fù)現(xiàn)
var timeStr = '2018-11-11 00:00:00';
var time = new Date(timeStr); // error: Invalid Date
...
在safari瀏覽器下,time為Invalid Date, 導(dǎo)致后面代碼執(zhí)行錯(cuò)誤轴总;
其他瀏覽器諸如chrome,firfox,ie運(yùn)行正常,time為:Sun Nov 11 2018 00:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間)粉私。
問題原因
在safari瀏覽器下,new Date() 無(wú)法識(shí)別像 YYYY-MM-DD HH:mm:ss近零、YYYY.MM.DD HH:mm:ss這樣的格式,只能識(shí)別YYYY/MM/DD HH:mm:ss抄肖、YYYY-MM-DDTHH:mm:ss這樣的格式久信,但是chrome,firfox,ie都做了很好的拓展,都能識(shí)別漓摩。
new Date('2018-11-11 00:00:00')
/* chrome: Sun Nov 11 2018 00:00:00 GMT+0800 (中國(guó)標(biāo)準(zhǔn)時(shí)間) (正常)
safari: Invalid Date
*/
new Date('2018.11.11 00:00:00')
/* chrome: 正常
safari: Invalid Date
*/
new Date('2018/11/11 00:00:00')
/* chrome: 正常
safari: 正常
*/
new Date('2018-11-11T00:00:00')
/* chrome: 正常
safari: 正常
*/
解決方案
- 直接轉(zhuǎn)換時(shí)間字符串中的'-'為'/'裙士。
var timeStr = '2018-11-11 00:00:00';
var date = new Date(Date.parse(timeStr.replace(/-/g, '/')));
- 基于Date創(chuàng)建自己的Date類。
// es6環(huán)境
class UnitDate {
constructor (date) {
let { userAgent } = window.navigator;
if (userAgent.includes('Safari')) {
if (typeof date === 'string') {
date = date.replace(/-/g, '/');
return new Date(date);
}
return new Date(date);
}
return new Date(date);
}
}
var date = new UnitDate('2018-11-11 00:00:00'); //正常
var date_2 = new UnitDate('2018.11.11 00:00:00'); //正常
...