ie 不识别new Date(params) 传参的解决方案

发表于 JS 分类,标签:

ie 11

new Date() 传参会显示,无效的日期。如下

  1. 2018-8-22  格式非 yyyy-mm-dd  报错 , 所以建议项目中定义日期格式都定义为 yyyy-mm-dd 格式
    image.png错误

    image.png 正确

  2.   image.png  加上小时又错误

    image.png  chrome 显示正确

  3. image.png  加上完整的时分秒,还是错误

    image.pngchrome 显示正确

解决方案: 

这里我们需要先学下Date对象中的两个方法  

1.setUTCFullYear()

语法

dateObject.setUTCFullYear(year,month,day)


参数描述
year

必需。要给 dateObject 设置的年份字段的值。

该参数应该是含有世纪值的完整年份,如 1999,而不只是缩写的年份值,比如 99。

month

可选。要给 dateObject 设置的月份字段的值。使用世界时表示。

该参数是 0 ~ 11 之间的整数。

day

可选。要给 dateObject 设置的天字段的值。使用世界时表示。

该参数是 1 ~ 31 之间的整数。

2.setHours() 

语法

dateObject.setHours(hour,min,sec,millisec)


参数描述
hour必需。表示小时的数值,介于 0(午夜) ~ 23(晚上11点) 之间,以本地时间计(下同)。
min可选。表示分钟的数值,介于 0 ~ 59 之间。在 EMCAScript 标准化之前,不支持该参数。
sec可选。表示秒的数值,介于 0 ~ 59 之间。在 EMCAScript 标准化之前,不支持该参数。
millisec可选。表示毫秒的数值,介于 0 ~ 999之间。在 EMCAScript 标准化之前,不支持该参数。

根据以上知识,创建一个新的date,取名 

transferDate(dateString) 
dateString参数格式为标准的  yyyy-mm-dd hh:mm:ss:ms  === 年-月-日 时:分:秒:毫秒


//解决new Date()IE不支持传参
function transferDate(dateString) {
    // 拆分日期
    var _dateString = dateString.split(' ');
    //获取日期 =>年月日
    var _date = _dateString[0].split('-');
    //创建一个新的日期
    var _newDate = new Date();
    //设置当前日期  年月日 (注意原始的月份是0 -11 )
    _newDate.setUTCFullYear(
        _date[0],  //  年
        ((_date[1]?_date[1]:0) - 1),  // 月
        (_date[2]?_date[2]:1) // 日
    );
    var  _len=_dateString.length;
    if(_len>1){
        //获取时间 => 时分秒
        var _times = _dateString[_len - 1].split(':');
        //设置当前时间 时分秒  (注意时区转换,北京时间,东八区加了8,所以先减去8 )
        _newDate.setUTCHours(
            ((_times[0]?_times[0]:0) - 8),  // 时
            (_times[1]?_times[1]:0), // 分
            (_times[2]?_times[2]:0), // 秒
            (_times[3]?_times[3]:0)   // 毫秒
        );
    }
    return _newDate;
}

OK  现在我们把上面出错的日期,在进行一次测试;

全部通过;

image.png

0 篇评论

发表我的评论