如何将日期区间转换为指定格式的数组?附示例
如何将日期区间转换为指定格式的数组
我来给你一个实用的JavaScript实现方案,刚好能完美匹配你想要的数组格式:
核心思路
- 把起始、结束日期转换成
Date对象,方便后续逐天遍历操作 - 循环遍历日期区间内的每一天,提取出星期缩写、日期、月份缩写、年份这些信息
- 把每天的信息整理成指定的对象结构,依次推入结果数组
完整代码示例
function dateRangeToPeriodArray(startDateStr, endDateStr) { // 定义星期和月份的英文缩写映射表 const dayAbbrs = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; const monthAbbrs = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']; const startDate = new Date(startDateStr); const endDate = new Date(endDateStr); const period = []; // 克隆起始日期,避免修改原日期对象 const currentDate = new Date(startDate); while (currentDate <= endDate) { // 提取当前日期的各项信息 const day = dayAbbrs[currentDate.getDay()]; const date = currentDate.getDate().toString(); const month = monthAbbrs[currentDate.getMonth()]; const year = currentDate.getFullYear().toString(); period.push({ day, date, month, year }); // 日期往后推一天,进入下一轮循环 currentDate.setDate(currentDate.getDate() + 1); } return period; } // 调用示例,生成你要的2020年3月1日到4月29日的数组 const period = dateRangeToPeriodArray('2020-03-01', '2020-04-29'); console.log(period);
代码细节说明
- 缩写映射:用两个数组对应星期和月份的英文缩写,通过
getDay()(返回0-6对应周日到周六)和getMonth()(返回0-11对应1-12月)的结果直接取值,简单高效 - 循环控制:用
while循环判断当前日期是否在区间内,每次循环后给日期加1天,直到遍历完所有日期 - 格式匹配:把日期和年份转成字符串,和你要求的输出格式完全一致
小提示
- 传入的日期字符串尽量用
YYYY-MM-DD这种格式,兼容性最好,避免不同环境下的解析问题 - 如果需要处理时区差异,可以把代码里的
getDay()、getDate()等方法换成对应的UTC方法(比如getUTCDay()),保证跨时区的日期准确性
内容的提问来源于stack exchange,提问作者Pang
相关产品推荐
相关产品推荐

