小编典典

JavaScript中两个日期之间的月差

all

我将如何计算 JavaScript 中两个 Date() 对象的差异,而只返回差异中的月数?

任何帮助都会很棒:)


阅读 90

收藏
2022-07-02

共1个答案

小编典典

“差异月数”的定义有很多解释。:-)

您可以从 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,这里:

  months = (d2.getFullYear() - d1.getFullYear()) * 12;
  months -= d1.getMonth() + 1;
  // −−−−−−−−−−−−−−−−−−−−^^^^
  months += d2.getMonth();

那是因为最初我说:

…这会找出两个日期之间有多少 完整的月份 ,不包括部分月份(例如,不包括每个日期所在的月份)。

我删除它有两个原因:

  1. 不计算部分月份结果并不是很多(大多数?)来回答的人想要的,所以我想我应该把它们分开。

  2. 即使按照这个定义,它也并不总是有效。:-D(对不起。)

2022-07-02