如何按小时对时间线进行分组

假设我有一组 JSON 数据,其中包含日期格式的 timeStarted 和 timeEnded 值。我正在努力按小时对 timeSpent 进行分组。例如,


[{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 分钟这样的值。至少我需要一个正确的思考方式。谢谢。


慕虎7371278
浏览 261回答 2
2回答

MYYA

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

相关分类

JavaScript