如何在JavaScript中找到两个日期之间的差异?

时间:2014-11-28 01:21:35

标签: javascript

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

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 ); 
}

3 个答案:

答案 0 :(得分:0)

所以我假设你想要计算两个日期之间的天数(包括结束日期)。你错误地输入了你的例子:2014年1月10日到2014年1月11日之间 - 应该返回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/

答案 1 :(得分:0)

如果您不想对可能较大的数字进行除法,可以通过 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 进行这些计算,这只是为了避免任何夏令时或其他时区更改

答案 2 :(得分:0)

包括Moment.js以便进行合理的日期处理。然后它就像

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