JavaScript如何按指定时长拆分营业时间生成有效预约时段队列
问题根因
- 代码内
middleMin固定为10,所有小时的分钟遍历都从10开始,导致9点之后的所有整点0分时段全部缺失 - 没有增加休息时段的判断逻辑,会错误生成休息时间段内的可预约时段
修复方案
建议将所有时间统一转换为当日总分钟数进行计算,避免嵌套循环带来的逻辑错位,实现代码如下:
// 定义基础参数 const Startshift = "09:10"; const breaktime = "12:00"; const endBreak = "12:30"; const endShift = "13:00"; const selectedServiceDuration = 10; // 单时段时长 单位分钟 const arr = []; // 工具函数:HH:MM格式时间转当日总分钟数 const timeToMin = (timeStr) => { const [hour, min] = timeStr.split(":").map(Number); return hour * 60 + min; } // 所有时间点转分钟数简化区间判断 const startMin = timeToMin(Startshift); const breakStartMin = timeToMin(breaktime); const breakEndMin = timeToMin(endBreak); const endMin = timeToMin(endShift); // 遍历生成时段 for (let currentMin = startMin; currentMin < endMin; currentMin += selectedServiceDuration) { // 过滤休息时段 if (currentMin >= breakStartMin && currentMin < breakEndMin) continue; // 转换回HH:MM格式,补全分钟前导0 const hour = Math.floor(currentMin / 60); const min = currentMin % 60; arr.push({ id: Math.random() * 56, hour: `${hour}:${min.toString().padStart(2, '0')}` }) }
输出结果
执行后输出的hour字段如下:
"9:10", "9:20", "9:30", "9:40", "9:50", "10:00", "10:10", "10:20", "10:30", "10:40", "10:50", "11:00", "11:10", "11:20", "11:30", "11:40", "11:50", "12:30", "12:40", "12:50"
内容的提问来源于stack exchange,提问作者Ashraf Hijazy
相关产品推荐
相关产品推荐

