为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕虎7371278 2021-06-07 08:16:29
假设我有一组 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 分钟这样的值。至少我需要一个正确的思考方式。谢谢。
查看完整描述

2 回答

?
MYYA

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]


查看完整回答
反对 回复 2021-06-11
  • 2 回答
  • 0 关注
  • 260 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信