JavaScript如何按自定义间隔获取两个日期之间的日期数组
实现思路与完整可运行代码
核心逻辑依托原生Date对象的自动日期校正能力处理跨月、闰年等边界情况,不需要手动计算每月天数、闰年差值,实现成本低且稳定性高。
- 第一步:封装解析方法,把输入的
dd.MM.yyyy格式日期字符串转换为标准Date对象 - 第二步:封装间隔递增逻辑,根据传入的单位调用
Date对应的set方法实现指定间隔的日期跳转 - 第三步:从起始日期叠加首次间隔后开始循环,只要生成日期不大于结束日期就格式化加入结果数组,直到超出范围停止循环
// 解析 dd.MM.yyyy 格式的字符串为Date对象 function parseDateStr(dateStr) { const [day, month, year] = dateStr.split('.').map(Number); return new Date(year, month - 1, day); // JS月份从0开始计数,因此要减1 } // 按指定间隔和单位递增日期 function addInterval(date, interval, count) { const newDate = new Date(date); switch(interval) { case 'days': newDate.setDate(newDate.getDate() + count); break; case 'week': newDate.setDate(newDate.getDate() + count * 7); break; case 'month': newDate.setMonth(newDate.getMonth() + count); break; case 'year': newDate.setFullYear(newDate.getFullYear() + count); break; default: throw new Error('不支持的间隔单位,仅支持days/week/month/year'); } return newDate; } // 格式化日期为要求的 dd.MM 格式 function formatDate(date) { const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); return `${day}.${month}`; } // 主方法:生成符合要求的日期数组 function generateDateRange(startStr, endStr, interval, intervalCount) { const startDate = parseDateStr(startStr); const endDate = parseDateStr(endStr); const result = []; let currentDate = addInterval(startDate, interval, intervalCount); while (currentDate <= endDate) { result.push(formatDate(currentDate)); currentDate = addInterval(currentDate, interval, intervalCount); } return result; }
调用示例
const start = "29.09.2021"; const end = "29.10.2021"; const interval = "days"; const intervalCount = 3; console.log(generateDateRange(start, end, interval, intervalCount)) // 输出结果与你给出的示例完全匹配: // ['02.10', '05.10', '08.10', '11.10', '14.10', '17.10', '20.10', '23.10', '26.10', '29.10']
补充说明
- 如果需要起始日期本身也计入结果数组,把
currentDate的初始赋值改为startDate即可 - 如果需要输出完整的
dd.MM.yyyy格式,修改formatDate方法拼接年份即可
内容的提问来源于stack exchange,提问作者markWanka
相关产品推荐
相关产品推荐

