首页 文章

如何计算两个日期之间的天数? [重复]

提问于
浏览
217

这个问题在这里已有答案:

7 回答

  • 14
    var oneDay = 24*60*60*1000; // hours*minutes*seconds*milliseconds
    var firstDate = new Date(2008,01,12);
    var secondDate = new Date(2008,01,22);
    
    var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay)));
    
  • 430

    这是一个执行此操作的函数:

    function days_between(date1, date2) {
    
        // The number of milliseconds in one day
        var ONE_DAY = 1000 * 60 * 60 * 24;
    
        // Convert both dates to milliseconds
        var date1_ms = date1.getTime();
        var date2_ms = date2.getTime();
    
        // Calculate the difference in milliseconds
        var difference_ms = Math.abs(date1_ms - date2_ms);
    
        // Convert back to days and return
        return Math.round(difference_ms/ONE_DAY);
    
    }
    
  • 0

    这是我使用的 . 如果您只是减去日期,它将无法在夏令时间界限内工作(例如4月1日至4月30日或10月1日至10月31日) . 这会减少所有时间,以确保您获得一天,并通过使用UTC消除任何DST问题 .

    var nDays = (    Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate()) -
                     Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate())) / 86400000;
    
  • 9

    这是我的实现:

    function daysBetween(one, another) {
      return Math.round(Math.abs((+one) - (+another))/8.64e7);
    }
    

    +<date> 对整数表示执行类型强制,并且与 <date>.getTime() 具有相同的效果, 8.64e7 是一天中的毫秒数 .

  • 8

    调整以允许夏令时差异 . 试试这个:

    function daysBetween(date1, date2) {
    
     // adjust diff for for daylight savings
     var hoursToAdjust = Math.abs(date1.getTimezoneOffset() /60) - Math.abs(date2.getTimezoneOffset() /60);
     // apply the tz offset
     date2.addHours(hoursToAdjust); 
    
        // The number of milliseconds in one day
        var ONE_DAY = 1000 * 60 * 60 * 24
    
        // Convert both dates to milliseconds
        var date1_ms = date1.getTime()
        var date2_ms = date2.getTime()
    
        // Calculate the difference in milliseconds
        var difference_ms = Math.abs(date1_ms - date2_ms)
    
        // Convert back to days and return
        return Math.round(difference_ms/ONE_DAY)
    
    }
    
    // you'll want this addHours function too 
    
    Date.prototype.addHours= function(h){
        this.setHours(this.getHours()+h);
        return this;
    }
    
  • 7

    我已经为另一个帖子写了这个解决方案,他们问,如何计算两个日期之间的差异,所以我分享了我准备的内容:

    // Here are the two dates to compare
    var date1 = '2011-12-24';
    var date2 = '2012-01-01';
    
    // First we split the values to arrays date1[0] is the year, [1] the month and [2] the day
    date1 = date1.split('-');
    date2 = date2.split('-');
    
    // Now we convert the array to a Date object, which has several helpful methods
    date1 = new Date(date1[0], date1[1], date1[2]);
    date2 = new Date(date2[0], date2[1], date2[2]);
    
    // We use the getTime() method and get the unixtime (in milliseconds, but we want seconds, therefore we divide it through 1000)
    date1_unixtime = parseInt(date1.getTime() / 1000);
    date2_unixtime = parseInt(date2.getTime() / 1000);
    
    // This is the calculated difference in seconds
    var timeDifference = date2_unixtime - date1_unixtime;
    
    // in Hours
    var timeDifferenceInHours = timeDifference / 60 / 60;
    
    // and finaly, in days :)
    var timeDifferenceInDays = timeDifferenceInHours  / 24;
    
    alert(timeDifferenceInDays);
    

    您可以跳过代码中的一些步骤,我已编写它以便于理解 .

    你会在这里找到一个正在运行的例子:http://jsfiddle.net/matKX/

  • 32

    从我的小日期差异计算器:

    var startDate = new Date(2000, 1-1, 1);  // 2000-01-01
    var endDate =   new Date();              // Today
    
    // Calculate the difference of two dates in total days
    function diffDays(d1, d2)
    {
      var ndays;
      var tv1 = d1.valueOf();  // msec since 1970
      var tv2 = d2.valueOf();
    
      ndays = (tv2 - tv1) / 1000 / 86400;
      ndays = Math.round(ndays - 0.5);
      return ndays;
    }
    

    所以你会打电话给:

    var nDays = diffDays(startDate, endDate);
    

    (完整来源于http://david.tribble.com/src/javascript/jstimespan.html . )

    Addendum

    可以通过更改这些行来改进代码:

    var tv1 = d1.getTime();  // msec since 1970
      var tv2 = d2.getTime();
    

相关问题