JavaScript计算日期间隔以及结果错误(少一天)的解决方法

下面的代码是之前从网上某个地方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' );

再次部署调试之后发现问题解决!

原文地址:https://www.cnblogs.com/havedream/p/4936235.html