JS中为日期对象数组的每个元素生成日期范围的实现方案
解决方案:生成日期范围数组
核心思路
遍历日期数组,对每个元素按规则生成起止范围:
- 非最后一个元素:结束日期为下一个元素的前一天
- 最后一个元素:结束日期为当前日期加7天
通过日期处理工具函数保证输出格式统一,最终拼接成指定格式的范围字符串。
代码实现
日期处理工具函数
// 将Date对象格式化为'YYYY-MM-DD HH:mm:ss'字符串 function formatDate(date) { const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, '0'); const day = String(date.getDate()).padStart(2, '0'); return `${year}-${month}-${day} 00:00:00`; } // 获取指定日期的前一天(00:00:00) function getPreviousDay(dateStr) { const date = new Date(dateStr); date.setDate(date.getDate() - 1); return formatDate(date); } // 获取指定日期加7天后的日期(00:00:00) function addSevenDays(dateStr) { const date = new Date(dateStr); date.setDate(date.getDate() + 7); return formatDate(date); }
生成日期范围数组
const objArr = [ '2022-10-17 00:00:00', '2022-10-24 00:00:00', '2022-11-07 00:00:00', '2022-11-14 00:00:00' ]; // 处理空数组边界情况 if (objArr.length === 0) { console.log('日期数组不能为空'); } const dateRangeArr = objArr.map((startDate, index) => { let endDate; if (index === objArr.length - 1) { endDate = addSevenDays(startDate); } else { endDate = getPreviousDay(objArr[index + 1]); } return `${startDate}-${endDate}`; }); console.log(dateRangeArr);
输出结果
运行后将得到你需要的日期范围数组:
[ '2022-10-17 00:00:00-2022-10-23 00:00:00', '2022-10-24 00:00:00-2022-11-06 00:00:00', '2022-11-07 00:00:00-2022-11-13 00:00:00', '2022-11-14 00:00:00-2022-11-20 00:00:00' ]
扩展适配月/年维度
如果后续要支持月、年维度筛选,只需替换对应的日期计算逻辑:
- 月维度:将
getPreviousDay替换为获取当月最后一天,addSevenDays替换为加1个月 - 年维度:将
getPreviousDay替换为获取当年最后一天,addSevenDays替换为加1年
示例月维度工具函数:
// 获取指定日期所在月的最后一天 function getLastDayOfMonth(dateStr) { const date = new Date(dateStr); const lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0); return formatDate(lastDay); } // 给指定日期加1个月 function addOneMonth(dateStr) { const date = new Date(dateStr); date.setMonth(date.getMonth() + 1); return formatDate(date); }
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

