如何使用Javascript拆分起止日期区间数据生成每日对应条目?
JavaScript 按起止日期拆分数据实现方案
没问题,这就给你搞定这个日期拆分的需求!核心思路就是先生成start_date到end_date之间的所有日期,然后把原数据里的日期相关字段替换成单个的date,其他字段原样保留就行。
实现步骤&代码示例
我写了个完整的可运行函数,注释都标清楚了:
// 输入的原始数据 const originalData = { eid: "9", end_date: "2018-01-14", event: true, mname: "test event2", start_date: "2018-01-12", user_type: "1" }; // 生成起止日期之间的所有日期数组 function getDateRange(startDateStr, endDateStr) { const dates = []; const startDate = new Date(startDateStr); const endDate = new Date(endDateStr); // 循环生成每天的日期,直到超过结束日期 let currentDate = new Date(startDate); while (currentDate <= endDate) { // 转成YYYY-MM-DD格式的字符串 const dateStr = currentDate.toISOString().split('T')[0]; dates.push(dateStr); // 日期加一天 currentDate.setDate(currentDate.getDate() + 1); } return dates; } // 拆分数据的主函数 function splitDataByDate(original) { const { start_date, end_date, ...rest } = original; const dateRange = getDateRange(start_date, end_date); // 遍历日期数组,生成每个日期对应的对象 return dateRange.map(date => ({ ...rest, date: date })); } // 执行拆分并输出结果 const splitResult = splitDataByDate(originalData); console.log(splitResult);
输出效果
运行上面的代码后,splitResult就是你想要的格式:
[ { eid: "9", event: true, mname: "test event2", user_type: "1", date: "2018-01-12" }, { eid: "9", event: true, mname: "test event2", user_type: "1", date: "2018-01-13" }, { eid: "9", event: true, mname: "test event2", user_type: "1", date: "2018-01-14" } ]
这个方法兼容性很好,不管起止日期间隔多少天都能处理,而且字段是动态保留的,要是原数据以后加了新字段,代码也不用改~
内容的提问来源于stack exchange,提问作者user5443928
相关产品推荐
相关产品推荐

