暮色呼如
如果您不考虑这个月中的某一天,那么到目前为止,这是一个更简单的解决方案。function monthDiff(dateFrom, dateTo) {
return dateTo.getMonth() - dateFrom.getMonth() +
(12 * (dateTo.getFullYear() - dateFrom.getFullYear()))}//examplesconsole.log(monthDiff(new Date(2000, 01), new Date(2000, 02))) // 1console.log(monthDiff(new Date(1999, 02), new Date(2000, 02))) // 12 full yearconsole.log(monthDiff(new Date(2009, 11), new Date(2010, 0))) // 1请注意,月份索引是基于0的。这意味着January = 0和December = 11.
紫衣仙女
“差额中的月数”的定义有很多解释。*-)您可以从JavaScriptDate对象中获取年份、月份和日期。根据您要寻找的信息,您可以使用这些信息来计算出两个时间点之间的时间间隔是多少个月。例如,在袖口上,这会发现有多少人。整整几个月介于两个日期之间,不包括部分月(例如,不包括每个月):function monthDiff(d1, d2) {
var months;
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth() + 1;
months += d2.getMonth();
return months <= 0 ? 0 : months;}monthDiff(
new Date(2008, 10, 4), // November 4th, 2008
new Date(2010, 2, 12) // March 12th, 2010);// Result: 15: December 2008, all of 2009, and Jan & Feb 2010monthDiff(
new Date(2010, 0, 1), // January 1st, 2010
new Date(2010, 2, 12) // March 12th, 2010);// Result: 1: February 2010 is the only full month between themmonthDiff(
new Date(2010, 1, 1), // February 1st, 2010
new Date(2010, 2, 12) // March 12th, 2010);// Result: 0: There are no *full* months between them(请注意,JavaScript中的月份值以0=1月开始。)将小数月包括在上面要复杂得多,因为一个典型的二月份的三天比八月份的三天(~10.714%)要大(~9.677%),当然二月份也是一个移动的目标,这取决于它是否是闰年。还有一些日期和时间库可用于JavaScript,这可能使这类事情变得更容易。