2 回答

TA贡献1868条经验 获得超4个赞
根据你对 timeSpent 和你的第一个数组的值,听起来你想要一个数组来表示每个时钟小时(例如从 9:00 到 10:00 或 14:00 到 15:00)是“花了”。
如果是这样,您可以通过获取每个时间间隔的小时和分钟(甚至是秒,如果您想更细化)并计算每个小时添加了多少分钟来完成此操作。
对于间隔在一个时钟小时内的简单情况,您可以通过从开始时间中减去结束时间来实现。在几个小时的时间间隔内,它有点复杂。有关处理此问题的一种方法,请参阅下面的代码。可能有更好的方法,代码只写到一分钟,但这是一个开始。
hours下面数组的键对应于每个时钟小时。
const timesElapsed = [
{timeStarted: '00:10:30', timeEnded: '00:14:02'},
{timeStarted: '00:48:08', timeEnded: '02:33:33'}
]
// Initialize hours array: each key of the array represents a specific clock hour
let hours = []
for (let interval of timesElapsed) {
// Get the pertinent data as Numbers
const startHour = (Number)(interval.timeStarted.split(':')[0])
const startMinute = (Number)(interval.timeStarted.split(':')[1])
const endHour = (Number)(interval.timeEnded.split(':')[0])
const endMinute = (Number)(interval.timeEnded.split(':')[1])
// Initialize elements in Hour array if need be
if (hours[startHour] === undefined) hours[startHour] = 0
if (hours[endHour] === undefined) hours[endHour] = 0
// An interval within an hour
if (startHour === endHour) {
hours[startHour] += (endMinute - startMinute)
} else {
// The first hour of a multi-hour interval
hours[startHour] += 60 - startMinute
// The middle hours, if any
for (let i = startHour + 1; i < endHour; i++)
hours[i] = 60
// The final hour
hours[endHour] += endMinute
}
}
// console.log(hours)
// [16, 60, 33]
添加回答
举报