获取两个日期之间的月份JavaScript



问题

首先,我要澄清的是,这个问题不是javascript中两个日期之间的月差或javascript月差的重复

我的问题是关于在两个日期之间获得月份,而不是的月份数

预期结果

因此,如果date1是2022年1月11日(mm/dd/yyyy),而date2是2023年2月20日,则它应该像["November", "December", "January", "February"]一样输出一个月份数组,包括date1date2的月份。我需要知道如何返回两个日期之间的实际月份,而不是月份数。有人能解释一下该怎么做吗?

问题中链接的帖子已经是一个良好的开端。

也许想想当你想把结果写在一张纸上时,你会怎么做。

当我们知道要开始的月份时,作为索引[0…11],我们可以从那里开始计数,并从数组中添加月份名称:

const xmas = new Date("December 25, 1999 23:15:30");
const summer = new Date("June 21, 2003 23:15:30");
function monthsBetween(dstart, dend) {
const monthNames = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
let result = [];
let current = dstart.getMonth();
let end = (dend.getFullYear() - dstart.getFullYear()) * 12 + dend.getMonth();
for (;current <= end; current += 1) {
result.push(monthNames[current % 12]);
}
return result;
}
console.log(monthsBetween(xmas, summer)); // [December, January, February..., December, January, ...., June (multiple years)
console.log(monthsBetween(xmas, xmas)); // ["December"]

在您的示例2022-11-01到2023-02-20中,current将从10(11月,从0索引)计数到13(1:2月,从0+1年索引=12个月差异)

您可以循环从开始到结束的日期,边走边收集月份名称。

开始和结束应该是Date对象,以及如何将它们从时间戳(如";2022年1月11日";是一个单独的问题,应在之前的步骤中处理。

/* Get month names from start date to end date
* @param {Date} start - date to start from
* @param {Date} end - date to end at
* @param {string} lang - language for month names
* @returns {string[]} month names from start to end inclusive
*/
function getMonthNames(start = new Date(), end = new Date(), lang = 'en') {
let d = new Date(start.getFullYear(), start.getMonth());
let months = [];
while (d <= end) {
months.push(d.toLocaleString(lang,{month:'long'}));
d.setMonth(d.getMonth() + 1);
}
return months;
}
let start = new Date(2022, 10, 1);  // 01 Nov 2022
let end   = new Date(2023,  1, 20); // 20 Feb 2023 
console.log(getMonthNames(start, end))

相关内容

  • 没有找到相关文章

最新更新