显示不同年份的两个日期之间的月份
Display months between two dates with different years
我有一个月份数组:
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
中这两个日期之间的所有月份?在此先感谢您的帮助。
您可能会发现使用 date-fns
(https://date-fns.org/), more specifically the sub
function (https://date-fns.org/v2.28.0/docs/sub)
等实用程序库很有用
您可以使用 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));
一种简单的方法是每次将开始日期递增一个月,然后 return 数组中该索引处的值。唯一的问题是弄清楚“之间”是包括开始和结束月份还是只包括那些月份之间的月份。
以下包括结果中的开始和结束月份:
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)));
我有一个月份数组:
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
中这两个日期之间的所有月份?在此先感谢您的帮助。
您可能会发现使用 date-fns
(https://date-fns.org/), more specifically the sub
function (https://date-fns.org/v2.28.0/docs/sub)
您可以使用 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));
一种简单的方法是每次将开始日期递增一个月,然后 return 数组中该索引处的值。唯一的问题是弄清楚“之间”是包括开始和结束月份还是只包括那些月份之间的月份。
以下包括结果中的开始和结束月份:
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)));