您现在的位置是:首页 > 文章详情

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

日期:2018-11-15点击:457

问题复现

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'); //正常 ... 
原文链接:https://my.oschina.net/huskydog/blog/2876839
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章