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

时间:2019-08-05 04:13:31

标签: javascript date count monthcalendar

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

例如:

  

开始日期: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年[八月-十二月] = 4个月

     

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

     

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

     

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

1 个答案:

答案 0 :(得分: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();
}