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

标签 javascript

假设我有 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/

相关文章:

javascript - 如何从服务中删除 $scope 对象

Javascript原型(prototype)问题(使用谷歌地图)

javascript - 使用 JavaScript 随机化一组现有图像的布局

javascript - 拖放,使draggable为假

javascript - FireFox 上的 contentEditable div 多行问题

javascript - Tropo 托管服务是否允许包含第三方 JavaScript 库并在服务内使用它们?

javascript - ionic 切换检查属性

javascript - 在路径范围查询中使用命名空间

javascript - Discord 机器人在玩游戏

javascript - 如何隐藏/显示在 ASP.NET 中动态创建的 HTML 元素