假设我有 JSON 数据数组,其中 timeStarted 和 timeEnded 值采用日期格式。我正在努力将时间按小时分组。 例如,
[{timeStarted: '00:10:30', timeEnded: '00:14:02'},
{timeStarted: '00:48:08', timeEnded: '02:33:33'}, ...]
我正在尝试将它们分组,以便得到像这样的数组
[{hrs: '0', timeSpent: '16'},
{hrs: '1', timeSpent: '60'},
{hrs: '2', timeSpent: '34'}, ...]
我已经尝试了十亿次将它们分组,但我不知道如何进行:我总是得到像每小时 95 分钟这样的值。至少我需要一个正确的思考方式。谢谢。
最佳答案
根据 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]
关于javascript - 如何按小时对时间线进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56318604/