下面的代码是之前从网上某个地方COPY下来的,之前一直用着,前段时间DateDiff()方法突然出问题了,输入两个日期2015-10-01 和 2015-10-02之后,计算出来的日期是0!如果只有几天间隔的话都是少一天,更奇怪的是在有一些电脑上时间是对的,有一些电脑上少一天,想了好久也没有想明白,难道哪里出问题了,于是一步一步跟踪,终于问题出现了。
//计算天数差的函数,通用 function DateDiff(sDate1, sDate2) { //sDate1和sDate2是2002-12-18格式 var aDate, oDate1, oDate2, iDays; aDate = sDate1.split("-"); oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]); //转换为12-18-2002格式 aDate = sDate2.split("-"); oDate2 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]); iDays = parseInt(Math.abs(oDate1 - oDate2) / 1000 / 60 / 60 / 24); //把相差的毫秒数转换为天数 return iDays; } //比较两个时间大小 function opinionStartTimeEndTime(stratTime, endTime) { var strat = stratTime.split("-"); var end = endTime.split("-"); var sdate = new Date(strat[0], strat[1], strat[2]); var edate = new Date(end[0], end[1], end[2]); if (sdate.getTime() > edate.getTime()) { return false; } return true; }
就是下面这句话
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0]);
乍一看没啥问题,但是在个别电脑上两个日期都是用这个方法之后,比如2015-10-03 和 2015-10-01 计算出来的毫秒数是错的,最后导致计算天数少了一天。
正确的写法应该是下面这样的
oDate1 = new Date(aDate[1] + '-' + aDate[2] + '-' + aDate[0] + '00:00:00.000' );
再次部署调试之后发现问题解决!