如何基于起止datetime按指定间隔生成时间字符串数组
实现思路
核心逻辑是将起始时间向下对齐到指定时间间隔的整数刻度,之后每次叠加间隔时长,直到时间点超过结束时间向下对齐的刻度停止,最终把所有符合的时间点格式化为HH:mm字符串即可。
基于date-fns的具体实现步骤
- 第一步:处理起始时间,向下取整到最接近的间隔刻度(示例15分钟间隔场景下,10:05会对齐到10:00)
- 第二步:处理结束时间,同样向下取整到最接近的间隔刻度(示例11:35会对齐到11:30)
- 第三步:从对齐后的起始时间开始,循环叠加指定间隔时长,每生成一个时间点就格式化为
HH:mm存入数组,直到当前时间点超过对齐后的结束时间停止循环。
代码示例
import { parseISO, addMinutes, format, isBefore, getMinutes } from 'date-fns' // 入参分别为:start时间字符串、end时间字符串、间隔分钟数 function generateTimeArray(startStr, endStr, intervalMinute) { const startTime = parseISO(startStr) const endTime = parseISO(endStr) const result = [] // 工具方法:将时间向下对齐到intervalMinute的整数刻度 const alignToInterval = (date) => { const minutes = getMinutes(date) const offset = minutes % intervalMinute return addMinutes(date, -offset) } let current = alignToInterval(startTime) const alignedEnd = alignToInterval(endTime) while (isBefore(current, alignedEnd) || current.getTime() === alignedEnd.getTime()) { result.push(format(current, 'HH:mm')) current = addMinutes(current, intervalMinute) } return result } // 用你给出的示例测试 const timeArray = generateTimeArray("2021-04-10T10:05:00+02:00", "2021-04-10T11:35:00+02:00", 15) console.log(timeArray) // 输出 ["10:00", "10:15", "10:30", "10:45", "11:00", "11:15", "11:30"]
补充说明
你之前提到的intervalToDuration不需要用到,直接循环叠加间隔判断边界即可,逻辑更简单也不容易出错。
内容的提问来源于stack exchange,提问作者Denver Dang
相关产品推荐
相关产品推荐

