new Date() 在Safari下的 Invalid Date问题


声明:本文转载自https://my.oschina.net/huskydog/blog/2876839,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

插播一条广告→2021 ByteDance字节跳动内推←各城市、各方向的岗位都有,大量招人!


问题复现

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

在safari浏览器下,time为Invalid Date, 导致后面代码执行错误;

其他浏览器诸如chrome,firfox,ie运行正常,time为:Sun Nov 11 2018 00:00:00 GMT+0800 (中国标准时间)。

问题原因

在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');	//正常
 ...

本文发表于2018年11月16日 16:00
(c)注:本文转载自https://my.oschina.net/huskydog/blog/2876839,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1324 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1