如何实现分钟时段对象列表到小时时段列表的转换?
分钟时段转按小时划分的时段列表问题
需要把一组包含起止时分的分钟时段对象列表,转换为按小时划分的时段列表,每个时段要记录对应小时内的占用分钟数。已知所有时段时长都小于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
相关产品推荐
相关产品推荐

