我有一个月份数组:
const monthsArr = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
我也有两个日期:2021-09-07
和2022-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)));