IE浏览器关于时间格式的兼容问题

问题出现的场景

需求中提到需要对一项数据按照周进行统计,于是自己设计一个上下调节周数的时间控件。效果图如下:
在这里插入图片描述
实现代码如下:

// 得到日期的周数
function getWeekOfYear(dateStr){
    //var today = new Date(dateStr);
    var firstDay = new Date(dateStr.getFullYear(),0, 1);
    var dayOfWeek = firstDay.getDay();
    var spendDay= 1;
    if (dayOfWeek !=0) {
        spendDay=7-dayOfWeek+1;
    }
    firstDay = new Date(dateStr.getFullYear(),0, 1+spendDay);
    var d =Math.ceil((dateStr.valueOf()- firstDay.valueOf())/ 86400000);
    var result =Math.ceil(d/7);
    return result+1;
};

// 得到周数对应的日期起始到结束日期,从星期一到星期天
function week2DateRange(num,date) { 
    if(num < 1 || num > 53) 
    return RangeError('周数必须符合:0);
    // 接受浮点数,但做取整处理。 
    num = num|0; 
    var d = date ? new Date(date) : new Date(); 
    var start = new Date(d.getFullYear() + '-01-01'); // 当前的date[0时0分]
    
    var week = start.getDay() - 1//一年的开始的第一天是这周的第几天
    start = new Date(start.getTime() - week*24*60*60*1000);
    
    //console.info("start:"+start)
    var now = new Date(start.getTime() + (num-1)*7*24*60*60*1000); // 当前周的周一date,用当前毫秒减去偏差的毫秒
    //console.info("now:"+now)
    var begin = new Date(now.getTime() - (now.getDay()-1)*60*60*1000); // 在得出周一的date后,周日的date即可以通过setDate的方式直接设置即可 
    var finish = new Date(begin); 
    finish.setDate(begin.getDate()+6); 
    //return begin.toLocaleDateString() + '~' + finish.toLocaleDateString();
    var beginMouth = begin.getMonth() + 1;
    var beginDate = begin.getDate();
    var finishMouth = finish.getMonth() + 1;
    var finishDate = finish.getDate();
    
    $("#startTime").text(begin.getFullYear() + "-" + (beginMouth < 10?("0"+beginMouth):beginMouth) + "-" + (beginDate < 10?("0"+beginDate):beginDate));
    $("#endTime").text(finish.getFullYear() + "-" + (finishMouth < 10?("0"+finishMouth):finishMouth) + "-" + (finishDate < 10?("0"+finishDate):finishDate));
}
// 周数减少1
function subWeek(){
    var week = $("#week").text();
    if((parseInt(week) - 1) < 1){
        return;
    }
    $("#week").text(parseInt(week) - 1);
    week2DateRange(parseInt(week) - 1)
    GridDoSearch();
}

// 周数加1
function addWeek(){
    var week = $("#week").text();
    if((parseInt(week) + 1) > 53){ 
        return;
    }
    $("#week").text(parseInt(week) + 1);
    week2DateRange(parseInt(week) + 1)
    GridDoSearch();
}

代码编写完成后,经过Chrome和我自己IE9、IE11的测试都没有出现问题,可以交于用户体验的是后却出现了NaN错误,在页面中加载不出来当前周的起始日期和结束日期。

经过上网查询,说是IE浏览器不支持“YYYY-MM-DD 2000-01-01 01:01:01 | 2000-1-1 1:1:1”此种格式的日期字符串。既new Date("2000-01-01")代码会返回NaN。于是对原来的代码进行改造,将出现上述调用方式的地市替换成自定义的函数NewDate

// IE兼容问题
function NewDate(str){  
  if(!str){  
    return 0;  
  }  
  arr=str.split(" ");  
  d=arr[0].split("-");  
  //t=arr[1].split(":");  
  var date = new Date();   
  date.setUTCFullYear(d[0], d[1] - 1, d[2]);   
  //date.setUTCHours(t[0], t[1], t[2], 0);   
  return date;  
} 

问题得到了解决,但是有一点想不通的是,为什么我自己的IE浏览器能通过,而客户的IE浏览器却不行。

你可能感兴趣的:(笔记记录)