繁体   English   中英

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

[英]Get the months between two dates JavaScript

问题

首先,我要澄清这个问题不是Difference in months between two dates in javascript or javascript month difference的重复

我的问题具体是关于获取两个日期之间的月份,而不是月份

预期成绩

因此,如果date1是 11/01/2022 (mm/dd/yyyy) 并且date2是 02/20/2023,它应该是 output 一个月份数组,包括date1date2的月份,例如["November", "December", "January", "February"] 我需要知道如何返回两个日期之间的实际月份,而不是月份数。 有人可以解释这样做的方法吗?

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

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

当我们知道开始的月份时,作为索引 [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 个月差异)

您可以遍历从开始到结束的日期,将月份名称收集为 go。

开始和结束应该是Date对象,如何将它们从时间戳(如“11/01/2022”)转换是一个单独的问题,应该在前面的步骤中处理。

 /* 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))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM