Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在JavaScript中找到两个日期之间的差异?_Javascript - Fatal编程技术网

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

如何在JavaScript中找到两个日期之间的差异?,javascript,Javascript,我想找出两次约会的区别,包括两次约会。比如说, 11/1/2014 (Nov 1) - 10/1/2014 (Oct 1) == 32 days 我正在用以下内容检查我的结果 所以我假设你的意思是要计算两个日期(包括结束日期)之间的天数。您输入的示例错误:2014年1月10日至2014年1月11日之间-应返回32天 因此,如果是这种情况,请删除日期的时间部分,然后执行日期减法: var d1 = new Date('October 01 2014'.replace('th','')); var

我想找出两次约会的区别,包括两次约会。比如说,

11/1/2014 (Nov 1) - 10/1/2014 (Oct 1) == 32 days
我正在用以下内容检查我的结果


所以我假设你的意思是要计算两个日期(包括结束日期)之间的天数。您输入的示例错误: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

小提琴:

如果你不想用可能很大的数字除法,你可以让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;
}
如果你的时间范围跨越几十年或几百年,这对你来说是很好的


否则,只需快速修改
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;
}
然后


请注意,我在这些计算中使用了UTC,这只是为了避免任何夏令时或其他时区更改,包括正常的日期处理。那就很容易了

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

欢迎问题是什么?你期望得到什么?你得到了什么?他,如果你想用一个简单的日期处理,他会使用。@ NIT最初用Simult.js来标记它,但是我删除了标签,因为这个问题与它没有任何关系。我可能会考虑在UTC中做计算,以避免时区变化给你带来奇怪的结果。
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
var a = moment([2014,12,9])
var b = moment([2014,11,3])
a.diff(b, 'days') //37