关于javascript:如何计算两个日期之间的天数?

How to calculate the number of days between two dates?

本问题已经有最佳答案,请猛点这里访问。
  • 我正在计算"从"和"到"日期之间的天数。例如,如果开始日期是2010年4月13日,结束日期是2010年4月15日,则结果应该是

  • 如何使用javascript获得结果?


  • 1
    2
    3
    4
    5
    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)));


    下面是一个函数,它执行以下操作:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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);

    }


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

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

    作为一个函数:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function DaysBetween(StartDate, EndDate) {
      // The number of milliseconds in all UTC days (no DST)
      const oneDay = 1000 * 60 * 60 * 24;

      // A day in UTC always lasts 24 hours (unlike in other time formats)
      const start = Date.UTC(EndDate.getFullYear(), EndDate.getMonth(), EndDate.getDate());
      const end = Date.UTC(StartDate.getFullYear(), StartDate.getMonth(), StartDate.getDate());

      // so it's safe to divide by 24 hours
      return (start - end) / oneDay;
    }


    以下是我的实现:

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

    +对整数表示进行类型强制,其效果与.getTime()8.64e7是一天中的毫秒数相同。


    根据日光节约差异进行调整。试试这个:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
      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;
    }


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

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    // 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/


    从我的小日期差计算器:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    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;
    }

    所以你可以打电话给:

    1
    var nDays = diffDays(startDate, endDate);

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

    补遗

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

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