zoukankan      html  css  js  c++  java
  • 奇怪的Js时间计算方法,跨多个月后出现1天的误差

    在项目中要求用计算两个时间相差的天数,通俗的说就是两个时间 相减,

    我的方法 先把两个时间转成相应的毫秒,相减后,再除以(1000 * 60 * 60 * 24) 就可以得到对应天数,但天数会比实际少一天所以需要再加上一天

    代码如下

     function DateDiff() {
                      //startTime和endTime是18/12/2002格式   
                     var startTime = $("#<%=txtDepartureDate.ClientID %>").val();
                     var endTime = $("#<%=txtReturnDate.ClientID %>").val();
      
                     var newDate, sDate, eDate, iDays
      
                     newDate = startTime.split("/")
                     sDate = new Date(aDate[2], aDate[1]-1, aDate[0])
     
                     newDate = endTime.split("/")
                     eDate = new Date(aDate[2], aDate[1]-1, aDate[0])
                     iDays = Math.floor((eDate2 - sDate) / 86400000)
                     alert(iDays+1);
     }

           当时测试没有跨好几个月,发现都没有问题,直到测试人员提了BUG然后自己仔细测终于发现了

    BUG:开始日期为:06/08/2013     结束日期为:30/11/2013  计算的结果为116 

     然后将结束日期改为:01/12/2013 计算的结果居然为118,无缘无故的多出来了1天 

    然后偿试换种写法方法式都是把时间转成毫秒后相减再除(1000 * 60 * 60 * 24) 结果都多了一天,

     最后查看了JS 文档才知道原来 Js Moth默认是从0开始的,所以应该把月都减1  

    如 

    Date(aDate[2], aDate[1]-1, aDate[0])
    这样计算就会得到正确的天数

    还有一种用C#代码去算也是可以的代码如下:

    1             int nights =0;
    2             if (!string.IsNullOrEmpty(startTime) && !string.IsNullOrEmpty(endTime))
    3             {
    4                 System.TimeSpan td = Convert.ToDateTime(endTime) - Convert.ToDateTime(startTime);
    5                 nights = td.Days + 1;
    6               
    7             }
  • 相关阅读:
    个人主页
    本周个人总结
    周个人总结
    排球比赛计分程序的典型用户和场景
    排球比赛计分规则功能说明书
    [黑马程序员]入学面试题!
    [黑马论坛]24期技术活动题目及答案!
    [黑马论坛]23期技术活动题目及答案!
    [黑马程序员]训练营入学考试题!
    [黑马程序员]基础测试题目!
  • 原文地址:https://www.cnblogs.com/zery/p/3240203.html
Copyright © 2011-2022 走看看