关于new Date()方法在IE8下面无效的解决办法

1. 如果获取两个日期差是需要Date( )方法的,最近发现Date()方法在IE8下并不友好,存在一些兼容性的问题。

下面介绍方法,计算两个日期差

//计算日期差函数,兼容IE8
   function getDays(strDateStart,strDateEnd){
      var strSeparator = ".";  //2017.08.08 这里以.为分隔符
      var oDate1; var oDate2; var iDays;
      oDate1= strDateStart.split(strSeparator);
      oDate2= strDateEnd.split(strSeparator);
      var strDateS = new Date(oDate1[0], oDate1[1]-1, oDate1[2]);
      var strDateE = new Date(oDate2[0], oDate2[1]-1, oDate2[2]);
      iDays = parseInt(Math.abs(strDateS - strDateE ) / (1000*24*3600))
      return iDays ;
 }

  alert( getDays('2017.08.23',2017.08.13''));  //10

2. 上面的方法是一种,第二种是把日期格式转换一下,再用返回的日期进行处理。

function parseISO8601(dateStringInRange) {
        var isoExp = /^\s*(\d{4}).(\d\d).(\d\d)\s*$/,
            date = new Date(NaN), month,
            parts = isoExp.exec(dateStringInRange);

        if(parts) {
            month = +parts[2];
            date.setFullYear(parts[1], month - 1, parts[3]);
            if(month != date.getMonth() + 1) {
                date.setTime(NaN);
            }
        }
        return date;
    }

这样用转换后返回的日期在进行.getTime()等方法IE就能正常处理了

//计算两个日期相差天数
   function getDays(vaildEDate,currentDate){  
       var sDate = parseISO8601(vaildEDate).getTime();
       var eDate = parseISO8601(currentDate).getTime();
       var iDays = parseInt((eDate - sDate)/(1000*60*60*24));
      return iDays ;  
 }  


猜你喜欢

转载自blog.csdn.net/ChauncyWu/article/details/77478938
今日推荐