【问题标题】:How can I find the difference between two dates in JavaScript?如何在 JavaScript 中找到两个日期之间的差异?
【发布时间】:2014-11-28 01:21:34
【问题描述】:

我想找出两个日期之间的差异,包括日期。例如,

11/1/2014 (Nov 1) - 10/1/2014 (Oct 1) == 32 days

我正在使用以下page检查我的结果

var date1 = new Date(2013, 10, 01);
var date2 = new Date(2015, 10, 15);
var diff = new Date(date2.getTime() - date1.getTime());
console.log("diff.getUTCDate: " + diff.getUTCDate() );
// diff is: Thu Jul 05 1973 04:00:00 GMT+0300 (EEST)
if(diff.getUTCDate() == 1){
  console.log(diff.getUTCDate() ); // Gives day count of difference
}else{
   console.log( diff.getUTCDate() + 1 ); 
}

【问题讨论】:

  • 欢迎。问题是什么?你期望什么,你得到了什么?他,谁?
  • 如果你想要理智和简单的日期处理,请使用Moment.js
  • @Nit OP 最初用 moment.js 标记它,但我删除了该标记,因为这个问题与它没有任何关系。

标签: javascript


【解决方案1】:

所以我假设您的意思是要计算两个日期之间的天数(包括结束日期)。你打错了你的例子:在 10/01/2014 和 11/01/2014 之间 - 应该返回 32 天

因此,如果是这种情况,请删除日期的时间部分,然后进行日期减法:

var d1 = new Date('October 01 2014'.replace('th',''));
var d2 = new Date('November 01 2014'.replace('th',''));

// remove the time portion, set the dates to midnight
d1.setHours(0,0,0,0);
d2.setHours(0,0,0,0);

var diff = Math.ceil((d2 - d1) / 86400000) + 1;

console.log(diff); //returns 32

小提琴:http://jsfiddle.net/WJ5Rd/5/

【讨论】:

  • 我会考虑在 UTC 中进行计算,以避免时区更改给您带来奇怪的结果
【解决方案2】:

如果你不想用可能很大的数字做除法,你可以通过让 Date 为你做一些工作来减少问题

function isLeapYear(year) {
    if (year % 4) return false;
    if (year % 100) return true;
    if (year % 400) return false;
    return true;
}

function dayOfYear(date) {
    var d1 = Date.UTC(date.getUTCFullYear(), 0, 0),
        d2 = Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate());
    return (d2 - d1) / 864e5;
}

function daysBetween(start, end) {
    var days = dayOfYear(end) - dayOfYear(start);
    start = start.getUTCFullYear();
    end = end.getUTCFullYear();
    for (; start < end; ++start)
        days += isLeapYear(start) ? 366 : 365;
    return days;
}

现在只是一个例子

daysBetween(new Date(2014, 10-1, 1), new Date(2014, 11-1, 1)); // 32

如果您的时间范围跨越几十年或几个世纪,这很有用


否则只需对dayOfYear 进行快速修改即可

function countDays(start, end) {
    var d1 = Date.UTC(start.getUTCFullYear(), start.getUTCMonth(), start.getUTCDate()),
        d2 = Date.UTC(end.getUTCFullYear(), end.getUTCMonth(), end.getUTCDate());
    return (d2 - d1) / 864e5;
}

然后

countDays(new Date(2014, 10-1, 1), new Date(2014, 11-1, 1)); // 32

请注意,我使用 UTC 进行这些计算,这只是为了避免任何夏令时或其他时区更改

【讨论】:

    【解决方案3】:

    包括Moment.js 以进行合理的日期处理。然后就很简单了

    var a = moment([2014,12,9])
    var b = moment([2014,11,3])
    a.diff(b, 'days') //37
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-14
      • 1970-01-01
      • 2011-06-24
      • 1970-01-01
      相关资源
      最近更新 更多