如何用JavaScript获取两个日期之间的具体月份?
获取两个日期之间的具体月份数组
实现思路
- 将输入的
mm/dd/yyyy格式日期字符串转换为JavaScript的Date对象,注意JS中月份是0索引(0代表1月,11代表12月)。 - 明确起始年月与结束年月,确保起始日期不晚于结束日期(若输入顺序颠倒则交换)。
- 循环遍历从起始年月到结束年月的所有月份,收集每个月份的全称。
- 利用
Intl.DateTimeFormat获取本地化的月份名称,支持多语言切换。
代码实现
function getMonthsBetweenDates(dateStr1, dateStr2) { // 解析mm/dd/yyyy格式的日期字符串,返回{year, month}(month为0-11) const parseDate = (dateStr) => { const [mm, dd, yyyy] = dateStr.split('/').map(Number); return { year: yyyy, month: mm - 1 }; }; let start = parseDate(dateStr1); let end = parseDate(dateStr2); // 如果起始日期晚于结束日期,交换两者 if (start.year > end.year || (start.year === end.year && start.month > end.month)) { [start, end] = [end, start]; } const months = []; const formatter = new Intl.DateTimeFormat('en-US', { month: 'long' }); let currentYear = start.year; let currentMonth = start.month; // 循环收集所有月份 while (currentYear < end.year || (currentYear === end.year && currentMonth <= end.month)) { const date = new Date(currentYear, currentMonth, 1); months.push(formatter.format(date)); currentMonth++; if (currentMonth > 11) { currentMonth = 0; currentYear++; } } return months; } // 测试示例 const date1 = '11/01/2022'; const date2 = '02/20/2023'; console.log(getMonthsBetweenDates(date1, date2)); // 输出: ["November", "December", "January", "February"]
代码说明
parseDate函数负责拆分日期字符串,转换为便于处理的年月对象,同时修正JS月份的索引问题。- 加入日期顺序校验,避免因输入起始日期晚于结束日期导致的错误。
- 使用
Intl.DateTimeFormat生成月份全称,若需要中文月份,只需将'en-US'改为'zh-CN'即可。 - 循环逻辑通过递增月份并处理跨年情况,确保遍历所有目标月份。
内容的提问来源于stack exchange,提问作者XYBOX
相关产品推荐
相关产品推荐

