美文网首页让前端飞
new Date() 在Safari下的 Invalid Dat

new Date() 在Safari下的 Invalid Dat

作者: 清晨细雨霏 | 来源:发表于2018-11-16 09:56 被阅读0次

    问题复现

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

    相关文章

      网友评论

        本文标题:new Date() 在Safari下的 Invalid Dat

        本文链接:https://www.haomeiwen.com/subject/qfmpfqtx.html