new Date() 在Safari下的 Invalid Date問題

問題復現

var timeStr = '2018-11-11 00:00:00';
var time = new Date(timeStr);	// error: Invalid Date
...

在safari瀏覽器下,time爲Invalid Date, 致使後面代碼執行錯誤;es6

其餘瀏覽器諸如chrome,firfox,ie運行正常,time爲:Sun Nov 11 2018 00:00:00 GMT+0800 (中國標準時間)。chrome

問題緣由

在safari瀏覽器下,new Date() 沒法識別像 YYYY-MM-DD HH:mm:ss、YYYY.MM.DD HH:mm:ss這樣的格式,只能識別YYYY/MM/DD HH:mm:ss、YYYY-MM-DDTHH:mm:ss這樣的格式,可是chrome,firfox,ie都作了很好的拓展,都能識別。瀏覽器

new Date('2018-11-11 00:00:00')	
/* chrome: Sun Nov 11 2018 00:00:00 GMT+0800 (中國標準時間)  (正常)
   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: 正常
*/

解決方案

  1. 直接轉換時間字符串中的'-'爲'/'。
var timeStr = '2018-11-11 00:00:00';
var date = new Date(Date.parse(timeStr.replace(/-/g, '/')));
  1. 基於Date建立本身的Date類。
// es6環境
 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');	//正常
 ...
相關文章
相關標籤/搜索