获取 Javascript 中两 (2) 个日期之间*每年*的月数 [例如:2019 年 8 月 - 2022 年 8 月]

Posted

技术标签:

【中文标题】获取 Javascript 中两 (2) 个日期之间*每年*的月数 [例如:2019 年 8 月 - 2022 年 8 月]【英文标题】:Get the Number of Months *Per Year* between Two (2) Dates in Javascript [Ex: Aug 2019 - Aug 2022] 【发布时间】:2019-08-05 04:13:31 【问题描述】:

这可能与 Difference in Months between two dates in javascript 重复,但如果输入有多年,我需要计算 PER YEAR 的月数。

例如:

开始日期:2019-05-08

结束日期:2022-05-08

所以这将是 3 年,但总共有 4 个产出。我需要得到每年的月数。

startDate = "2019-08-05" // YYY-MM-DD
payOffDate = "2022-08-05"

function monthDiff(date1, date2)
    months = (date2.getFullYear() - date1.getFullYear()) * 12;
    months -= date1.getMonth() + 1;
    months += date2.getMonth();
    return months <= 0 ? 0 : months;


monthDiff(
    new Date(startDate),
    new Date(payOffDate)
); // 35 Months

在这种情况下,它会通过给定的两个输入(startDate、payOffDate)输出 35 个月,但我希望每年单独输出它们,只有这两个日期范围(不是手动输入 2019 年 8 月 - 2019 年 12 月,2022 年 1 月 - 2022 年 8 月等)

2019 [8 月 - 12 月] = 4 个月

2020 [1 月 - 12 月] = 12 个月

2021 [1 月 - 12 月] = 12 个月

2022 [1 月 - 8 月] = 7 个月

【问题讨论】:

请同时添加您的代码。展示您到目前为止所尝试的内容。 您在旅游问题中发布的链接中的答案解决了您的问题... 请查看更新后的帖子@RinkeshGolwala,谢谢 :) 为什么 8 月到 12 月是 4 个月,而 1 月到 12 月是 12 个月? Jan-Aug 只有 7 岁?这没有意义。 new Date(startDate) 中的字符串“2019-05-08”将被视为 UTC,因此 get 方法应该是 getUTC 方法。除了异常的 Jan-Dec 是 12 而不是 11 之外,它们似乎可以简单地是 getUTCMonth(date2) - getUTCMonth(date1) 【参考方案1】:

注意:调整您的月份数字模糊度。代码本身描述了一切。

const monthNames = ["January", "February", "March", "April", "May", "June",
  "July", "August", "September", "October", "November", "December"
];

d1 = new Date("2019-08-05") // YYY-MM-DD
d2 = new Date("2022-08-05")

//Start and End Years
var start_y = d1.getFullYear();
var end_y = d2.getFullYear();

//Start and End months
var start_m = d1.getMonth();
var end_m = d2.getMonth();

var m1,m2;

//Loop all years
for( var i = start_y; i<= end_y; i++)
    m2 = (i == end_y) ?  end_m : 11;
    m1 = (i == start_y) ? start_m : 0;

    let t1 = new Date(i,m1,1), t2 = new Date(i,m2,1);

    var diff = monthDiff( t1, t2);

    console.log(`$i[$monthNames[m1] - $monthNames[m2]] = $diff`);



function monthDiff(date1, date2)
    return date2.getMonth()+1 - date1.getMonth();

【讨论】:

以上是关于获取 Javascript 中两 (2) 个日期之间*每年*的月数 [例如:2019 年 8 月 - 2022 年 8 月]的主要内容,如果未能解决你的问题,请参考以下文章

如何计算Python Pandas中两列之间的日期差异[重复]

获取 JavaScript 中两个日期之间的差异? [复制]

javascript 红宝书笔记之操作日期

javascript获取当天日期,计算出该天所属周,列出本周从周一至周日的所有日期,求大神帮助!

如何将 DataFrame 中两列中的两个日期和时间合并为一列? [复制]

Javascript 获取和设置日期