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

JavaScript如何获取两个Date对象时间部分30分钟间隔的时间列表

实现方案

核心思路

  • 剥离日期影响:将两个Date对象的时间部分转换为当天零点开始的总分钟数,完全消除不同日期的干扰
  • 区间遍历:从起始分钟数开始,每次累加30分钟,直到不超过结束分钟数(包含两端边界)
  • 格式化输出:将总分钟数转换为12小时制带AM/PM的指定格式

代码示例(JavaScript)

function generateTimeSlots(startDate, endDate, intervalMinutes = 30) {
  // 提取时间部分转总分钟数,忽略日期信息
  const getTimeMinutes = (date) => date.getHours() * 60 + date.getMinutes();
  const startMins = getTimeMinutes(startDate);
  const endMins = getTimeMinutes(endDate);

  const slots = [];
  for (let currentMins = startMins; currentMins <= endMins; currentMins += intervalMinutes) {
    const hours = Math.floor(currentMins / 60);
    const minutes = currentMins % 60;
    // 转换12小时制标识
    const period = hours >= 12 ? 'PM' : 'AM';
    const displayHours = hours % 12 || 12; // 0点/12点统一显示为12
    // 分钟补前导零
    const displayMins = minutes.toString().padStart(2, '0');
    slots.push(`${displayHours}:${displayMins}${period}`);
  }
  return slots;
}

// 测试用例
const start = new Date('2024-01-01T08:00:00');
const end = new Date('2024-12-31T17:00:00');
console.log(generateTimeSlots(start, end));
// 输出:['8:00AM', '8:30AM', '9:00AM', ..., '4:30PM', '5:00PM']

代码示例(Python)

from datetime import datetime

def generate_time_slots(start_date: datetime, end_date: datetime, interval_minutes: int = 30):
    # 提取时间部分转总分钟数,忽略日期信息
    def get_time_minutes(d: datetime):
        return d.hour * 60 + d.minute
    start_mins = get_time_minutes(start_date)
    end_mins = get_time_minutes(end_date)

    slots = []
    current_mins = start_mins
    while current_mins <= end_mins:
        hours = current_mins // 60
        minutes = current_mins % 60
        # 转换12小时制标识
        period = "PM" if hours >= 12 else "AM"
        display_hours = hours % 12 or 12 # 0点/12点统一显示为12
        # 分钟补前导零
        display_mins = f"{minutes:02d}"
        slots.append(f"{display_hours}:{display_mins}{period}")
        current_mins += interval_minutes
    return slots

# 测试用例
start = datetime(2024,1,1,8,0,0)
end = datetime(2024,12,31,17,0,0)
print(generate_time_slots(start, end))

扩展说明

如果需要跨零点的场景(比如起始23:00,结束次日2:00),只需在遍历逻辑中加入判断:当当前分钟数超过1440(24小时总分钟数)后从0开始计数,直到覆盖到结束分钟数即可。间隔时长也可以按需调整,不用固定为30分钟。

内容的提问来源于stack exchange,提问作者publicstaticmain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 10:57:01