如何在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