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

如何实现分钟时段对象列表到小时时段列表的转换?

分钟时段转按小时划分的时段列表问题

需要把一组包含起止时分的分钟时段对象列表,转换为按小时划分的时段列表,每个时段要记录对应小时内的占用分钟数。已知所有时段时长都小于1小时(示例为30分钟)且互相不重叠。

示例1:00:00-00:30的30分钟时段

分钟时段对象:

let blockMinute = {
  hourInit: 0,
  minuteInit: 0,
  hourEnd: 0,
  minuteEnd: 30
}

预期转换结果:

[
{
  hourInit: 0,
  hourEnd: 1,
  accuMinutes: 30
}
]

该时段只需生成一个0-1的小时时段,记录占用30分钟。

示例2:00:45-01:15的30分钟时段

分钟时段对象:

let blockMinute2 = {
    hourInit: 0,
    minuteInit: 45,
    hourEnd: 1,
    minuteEnd: 15
}

预期转换结果:

[
{
    hourInit: 0,
    hourEnd: 1,
    accuMinutes: 15
},
{
    hourInit: 1,
    hourEnd: 2,
    accuMinutes: 15
}
]

该时段跨两个小时,需拆分为两个小时时段,各记录占用15分钟。

当前代码问题

现有代码无法正确计算跨小时时段的占用分钟数,而且处理00:30-01:00这类边界时段时,会错误生成两个小时时段(实际应该只生成一个0-1的小时时段)。现有代码如下:

let blockMinute = {
    hourInit: 0,
    minuteInit: 0,
    hourEnd: 0,
    minuteEnd: 30
}

let blockMinute2 = {
    hourInit: 0,
    minuteInit: 45,
    hourEnd: 1,
    minuteEnd: 15
}
// 所有时段时长一致,比如都是30分钟
let blocksMinute = [blockMinute, blockMinute2];

let blockHourExpected = [];
blocksMinute.forEach((blockMinute) => {
  let hourInit = blockMinute.hourInit;
  let minuteInit = blockMinute.minuteInit;
  let hourEnd = blockMinute.hourEnd;
  let minuteEnd = blockMinute.minuteEnd;
  for (let i = hourInit; i <= hourEnd; i++) {
    let exist = blockHourExpected.find((blockHour) => blockHour.hourInit == i);
    if (!exist) {
      blockHourExpected.push({
        hourInit: i,
        hourEnd: i + 1,
        accuMinutes: 0 // 此处未正确计算
      })
    }
  }
});
console.log(blockHourExpected)

预期最终合并结果

let blockHourExpectedExample = [{
    hourInit: 0,
    hourEnd: 1,
    accuMinutes: 45
 },
  {
    hourInit: 1,
    hourEnd: 2,
    accuMinutes: 15
 }
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 07:15:32