基于起始/结束时间与间隔计算可用时间槽的实现需求
实现任意间隔的时间槽生成方案
需求说明
给定起始时间(如11:00)、结束时间(如19:00)和间隔分钟数(如30),生成包含所有时间点的字符串数组,要求适配任意有效正整数间隔。
现有代码的问题
你当前的代码存在几个关键缺陷:
- 仅提取起始时间的小时部分,忽略了分钟(比如
start=11:15时直接失效) - 分钟格式没有补前导零,会出现
11:5这种不规范格式 dif的计算逻辑错误(字符串直接相减得到NaN),且仅按整小时循环,无法处理跨小时的间隔(比如90分钟)- 未正确包含结束时间点,且间隔非20分钟时内部循环次数计算会出错
完整解决方案
以下是适配任意正整数间隔的实现,核心思路是把时间转换为总分钟数进行计算,避免格式处理的繁琐:
function generateTimeSlots(startStr, endStr, interval) { // 辅助函数:将HH:mm格式的时间字符串转为总分钟数 const parseToMinutes = (timeStr) => { const [hour, minute] = timeStr.split(':').map(Number); return hour * 60 + minute; }; const startTotal = parseToMinutes(startStr); const endTotal = parseToMinutes(endStr); const timeSlots = []; // 从起始时间开始,每次累加间隔分钟数,直到覆盖结束时间 for (let current = startTotal; current <= endTotal; current += interval) { const hour = Math.floor(current / 60); const minute = current % 60; // 格式化小时和分钟,补前导零保证统一格式 const formattedHour = String(hour).padStart(2, '0'); const formattedMinute = String(minute).padStart(2, '0'); timeSlots.push(`${formattedHour}:${formattedMinute}`); } return timeSlots; } // 示例调用(和你的需求匹配) const start = '11:00'; const end = '19:00'; const interval = 30; console.log(generateTimeSlots(start, end, interval));
关键特性
- 适配任意间隔:只要是正整数间隔都能处理,比如15、25、90分钟等
- 格式规范:自动补前导零,输出统一的
HH:mm格式 - 边界处理:包含起始和结束时间点,若总时长无法被间隔整除,最后一个时间点会小于等于结束时间
- 容错性:只要输入的时间字符串是
HH:mm格式,不管是09:05还是9:5都能正确解析
测试示例
- 输入:
start='11:15', end='12:45', interval=20 - 输出:
["11:15", "11:35", "11:55", "12:15", "12:35"]
内容的提问来源于stack exchange,提问作者user17573859
相关产品推荐
相关产品推荐

