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

如何基于小时时间槽拆分对象数组格式的时间序列数据

按小时时间槽拆分时间区间数据实现方案

你已经生成了对应小时整点的时间槽数组,只要通过循环遍历每个原始时间条目,逐个拆分到对应小时区间即可,完整实现如下:

const moment = require('moment');
require('moment-range');

// 生成目标日期的小时时间槽,注意要和待处理数据的日期匹配,不要直接用当前日期避免匹配失败
const targetDate = '2021-08-20';
const day_start = moment(targetDate).startOf('day').hours(7);
const day_end = moment(targetDate).startOf('day').hours(15);
const day = moment.range(day_start, day_end);
const time_slots = Array.from(day.by('minutes', {step: 60}));

// 核心拆分函数
function splitTimeRecords(inputRecords, timeSlots) {
  const result = [];
  inputRecords.forEach(record => {
    // 转换当前记录的起止时间为moment对象便于比较
    let currentStart = moment(record.start_time);
    const recordEnd = moment(record.end_time);
    
    while (currentStart.isBefore(recordEnd)) {
      // 查找大于当前起始时间的下一个整点时间槽
      const nextSlot = timeSlots.find(slot => slot.isAfter(currentStart));
      // 如果下一个时间槽晚于当前记录结束时间,就用记录结束时间作为当前分段的终点
      const currentEnd = nextSlot && nextSlot.isBefore(recordEnd) ? nextSlot : recordEnd;
      
      // 生成拆分后的条目
      result.push({
        // 如果有时区偏差问题,可以替换为 currentStart.format('YYYY-MM-DDTHH:mm:ss.SSS')
        start_time: currentStart.toISOString(),
        end_time: currentEnd.toISOString(),
        Type: record.Type
      });
      
      // 更新下一段的起始时间,进入下一轮循环
      currentStart = currentEnd.clone();
    }
  });
  return result;
}

// 测试输入
const input = [
  { "start_time": "2021-08-20T07:00:00.000", "end_time": "2021-08-20T07:25:00.000", "Type": "A" },
  { "start_time": "2021-08-20T07:25:00.000", "end_time": "2021-08-20T08:39:49.000", "Type": "B" },
  { "start_time": "2021-08-20T08:39:50.000", "end_time": "2021-08-20T11:02:34.000", "Type": "C" }
];

// 调用得到输出
const output = splitTimeRecords(input, time_slots);
console.log(output);

输出结果和你要求的预期格式完全一致,如果需要处理跨天的时间区间,只要调整time_slots的生成范围覆盖对应跨天的整点即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 05:06:00