JavaScript 中两个日期之间的月份差异
2022-08-30 01:19:28
我如何计算出JavaScript中两个Date()对象的差异,同时只返回差异中的月数?
任何帮助都会很棒:)
我如何计算出JavaScript中两个Date()对象的差异,同时只返回差异中的月数?
任何帮助都会很棒:)
“差异中的月数”的定义受到很多解释。:-)
您可以从 JavaScript 日期对象获取年、月和月日。根据您要查找的信息,您可以使用这些信息来确定两个时间点之间有多少个月。
例如,即兴演奏:
function monthDiff(d1, d2) {
var months;
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth();
months += d2.getMonth();
return months <= 0 ? 0 : months;
}
function monthDiff(d1, d2) {
var months;
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth();
months += d2.getMonth();
return months <= 0 ? 0 : months;
}
function test(d1, d2) {
var diff = monthDiff(d1, d2);
console.log(
d1.toISOString().substring(0, 10),
"to",
d2.toISOString().substring(0, 10),
":",
diff
);
}
test(
new Date(2008, 10, 4), // November 4th, 2008
new Date(2010, 2, 12) // March 12th, 2010
);
// Result: 16
test(
new Date(2010, 0, 1), // January 1st, 2010
new Date(2010, 2, 12) // March 12th, 2010
);
// Result: 2
test(
new Date(2010, 1, 1), // February 1st, 2010
new Date(2010, 2, 12) // March 12th, 2010
);
// Result: 1
(请注意,JavaScript 中的月份值以 0 = January 开头。
在上面包括小数月份要复杂得多,因为典型的二月中的三天(约10.714%)比八月的三天(约9.677%)大,当然,即使是二月也是一个移动目标,这取决于它是否是闰年。
还有一些日期和时间库可用于JavaScript,可能会使这种事情变得更容易。
注意:上面曾经有一个,这里:+ 1
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth() + 1;
// −−−−−−−−−−−−−−−−−−−−^^^^
months += d2.getMonth();
那是因为最初我说:
...这找出两个日期之间有多少个完整的月份,不计算部分月份(例如,不包括每个日期所在的月份)。
我删除它有两个原因:
不计算部分月份,结果证明不是许多(大多数?)人想要的答案,所以我认为我应该把它们分开。
即使按照这个定义,它也并不总是有效。:-D(抱歉。
如果您不考虑月份中的某一天,这是迄今为止更简单的解决方案
function monthDiff(dateFrom, dateTo) {
return dateTo.getMonth() - dateFrom.getMonth() +
(12 * (dateTo.getFullYear() - dateFrom.getFullYear()))
}
//examples
console.log(monthDiff(new Date(2000, 01), new Date(2000, 02))) // 1
console.log(monthDiff(new Date(1999, 02), new Date(2000, 02))) // 12 full year
console.log(monthDiff(new Date(2009, 11), new Date(2010, 0))) // 1
请注意,月份索引从 0 开始。这意味着 和 。January = 0
December = 11