You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于起止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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 20:24:05