如何求时间和

我有一个数组,这个数组的长度不定,格式如下:

[
  {'name':'hj1','optime':'2:27'},
  {'name':'hj2','optime':'3:38'},
  {'name':'hj3','optime':'0:41'},
  {'name':'hj4','optime':'0:6'},
  {'name':'hj5','optime':'8:17'},
  {'name':'hj6','optime':'0:15'},
  {'name':'hj7','optime':'2:46'},
  {'name':'hj8','optime':'0:7'},
  {'name':'hj9','optime':'1:25'},
]

其中,optime就是工作耗时,格式为  小时:分钟。现在我想对这个数组进行求和(该例子的总耗时是19:42),如何实现。

阅读 2.2k
4 个回答

image.png

[
  {'name':'hj1','optime':'2:27'},
  {'name':'hj2','optime':'3:38'},
  {'name':'hj3','optime':'0:41'},
  {'name':'hj4','optime':'0:6'},
  {'name':'hj5','optime':'8:17'},
  {'name':'hj6','optime':'0:15'},
  {'name':'hj7','optime':'2:46'},
  {'name':'hj8','optime':'0:7'},
  {'name':'hj9','optime':'1:25'},
].reduce((s,n)=>{
    // console.log(n.optime.match(/(\d+):(\d+)/))
    var time = n.optime.match(/(\d+):(\d+)/)
    s+= +time[1]*60 + (+time[2])
    return s;
}, 0)

没明白是没仔细思考还是咋的,String.prototype.split函数可用来分割字符串,获得小时/分钟。遍历一次完事。

你这里最小单位是分钟,所以可以以分钟为单位,求取总分钟

比如2:27那就是 2 * 60 + 27,这么累计最会得到总分钟count(按你说的应该是19 * 60 + 42)

然后 h = count / 60 | 0, m = count % 60

可以先转换成second,然后求和,然后在转换成mins。

const totalSecs = [
  { name: "hj1", optime: "2:27" },
  { name: "hj2", optime: "3:38" },
  { name: "hj3", optime: "0:41" },
  { name: "hj4", optime: "0:6" },
  { name: "hj5", optime: "8:17" },
  { name: "hj6", optime: "0:15" },
  { name: "hj7", optime: "2:46" },
  { name: "hj8", optime: "0:7" },
  { name: "hj9", optime: "1:25" }
].reduce((secs, { optime }) => {
  const timeArr = optime.split(":");
  const ret = parseInt(timeArr[0], 10) * 60 + parseInt(timeArr[1], 10);
  return secs + ret;
}, 0);

console.log(parseInt(totalSecs / 60, 10) + ":" + (totalSecs % 60));

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题