显示年份不同的两个日期之间的月份



我有一个月份数组:

const monthsArr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];  

我也有两个日期:2021-09-072022-03-17。要获得这些日期之间的月数,我使用函数:

function monthDiff(dateFrom, dateTo) {
return dateTo.getMonth() - dateFrom.getMonth() + 12 * (dateTo.getFullYear() - dateFrom.getFullYear());
}

如何显示所有月份从数组monthsArr之间的这两个日期?谢谢你的帮助。

您可以使用Array().fill()生成所有涉及的年份的所有12个月,将其压平,然后使用slice从中提取相关部分。为了确保slice的第二个参数是负数(而不是零!),甚至可以在此基础上再加上12个月。第二个参数将是介于-23和-12之间的值:

const monthsArr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];  
function monthsBetween(dateFrom, dateTo) {
return Array(dateTo.getFullYear() - dateFrom.getFullYear() + 2)
.fill(monthsArr).flat()
.slice(dateFrom.getMonth(), dateTo.getMonth() - 23);
}
let dateFrom = new Date("2021-09-07");
let dateTo = new Date("2022-03-17");
console.log(monthsBetween(dateFrom, dateTo));

您可能会发现使用date-fns(https://date-fns.org/)之类的实用程序库很有用,更具体地说,是sub函数(https://date-fns.org/v2.28.0/docs/sub)

一种简单的方法是每次将开始日期增加一个月,并返回数组中该索引处的值。唯一的问题是要弄清楚"两者之间"是否存在。包括起始月和结束月,或仅包括两个月之间的月份。

下面包括结果中的起始月和结束月:

let months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
function getMonthsBetweenDates(startDate, endDate) {
// Make start as 1st of startDate month 
let s = new Date(startDate.getFullYear(), startDate.getMonth());
let result = [];
// Loop over months until get to end month
while (s <= endDate) {
result.push(months[s.getMonth()]);
s.setMonth(s.getMonth() + 1);
}
return result;
}
// Get months between 2021-09-07 and 2022-03-17
console.log(getMonthsBetweenDates(new Date(2021,8,7), new Date(2022,2,17)));

相关内容

  • 没有找到相关文章

最新更新