我将如何计算 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 = 一月开头。)
包括上面的小数月份要复杂得多,因为典型的二月份的三天比八月份的三天(~9.677%)占该月的更大比例(~10.714%),当然即使是二月份也是一个移动目标要看是不是闰年。
还有一些可用于 JavaScript 的日期和时间库,可能会使这类事情变得更容易。
注意 :上面曾经有一个+ 1,这里:
+ 1
months = (d2.getFullYear() - d1.getFullYear()) * 12; months -= d1.getMonth() + 1; // −−−−−−−−−−−−−−−−−−−−^^^^ months += d2.getMonth();
那是因为最初我说:
…这会找出两个日期之间有多少 完整的月份 ,不包括部分月份(例如,不包括每个日期所在的月份)。
我删除它有两个原因:
不计算部分月份结果并不是很多(大多数?)来回答的人想要的,所以我想我应该把它们分开。
即使按照这个定义,它也并不总是有效。:-D(对不起。)