• 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' );

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

  • 相关阅读:
    Spark&Hadoop:scala编写spark任务jar包,运行无法识别main函数,怎么办?
    Linux:krb5
    SqlServer数据库端口默认是1433吗?
    Linux下使用shell实现上传linux下某个目录下所有文件到ftp
    Spark+Hadoop+Hive集群上数据操作记录
    hadoop之 Hadoop2.2.0中HDFS的高可用性实现原理
    虚拟路由冗余协议VRRP
    hadoop 之Hadoop生态系统
    Oracle NoLogging Append 方式减少批量insert的redo_size
    Oracle常用的性能诊断语句
  • 原文地址:https://www.cnblogs.com/havedream/p/4936235.html
Copyright © 2020-2023  润新知