以hh:mm格式计算时间平均值

时间:2017-11-30 21:02:13

标签: javascript jquery

我有一些hh:mm格式的时间,我正在试图弄清楚如何正确计算平均值。

我发现这个fiddle做了类似的事情,但也有几毫秒我不需要,我很难把它转换成我需要的东西。

var times= [ '00:00:03.00', '00:00:05.00', '00:00:02.00', '00:00:06.00'],
    date = 0,
    result = '';
function offsetify(t){
    return t < 10 ? '0' + t : t;
}
for(var x = 0; x < times.length; x++ ) {
    var tarr = times[x].split(':');
    date += new Date(0, 0, 0, tarr[0], tarr[1], tarr[2].split('.')[0], tarr[2].split('.')[1]).getTime();   
}
var avg = new Date(date/times.length);
result = offsetify(avg.getHours()) + ':' + offsetify(avg.getMinutes()) + ':' + offsetify(avg.getSeconds()) + '.' + offsetify(avg.getMilliseconds());
document.write(result);

有人可以帮助修改这个,这样就可以为这样的数组提供正确的平均值:

var times= [ '00:03', '00:13', '02:10', '01:00']

谢谢!

3 个答案:

答案 0 :(得分:0)

只是想告诉你一种方法,你可以使用时间输入元素

将时间转换为良好的计算值

输入足够智能,可以确定如果您发送00:0300:00:03,它会解析hh:mm或hh:mm:ss为正确

var i = document.createElement('input')
i.type = 'time'
i.value = '00:01:03.00'
console.log(i.valueAsNumber) // Will help you calculate avg time easier
i.valueAsNumber = 3000
console.log(i.value) // a way to precent it in a readable way

这是我如何计算它...没有时区偏移或类似于jsfiddle示例中所做的事情

var sum = 0
var times = [ '00:00:03', '00:00:13', '00:02:10', '00:01:00']
var input = document.createElement('input')
input.type = 'time'

sum = times.reduce(function(prev, time) {
  input.value = time
  return prev + input.valueAsNumber
},0)

input.valueAsNumber = sum / times.length // avg time

console.log(input.value) 

答案 1 :(得分:0)

考虑到您需要处理mm:ss格式,此代码可能适用于您:

var times = [ '00:03', '00:13', '02:10', '01:00'];
var totalSeconds = 0;
times.forEach(function(element){
    var timeParts = element.split(":"); //Separate  mm ss

    var secs = Number(timeParts[0]) * 60 + Number(timeParts [1]); 
    totalSeconds += secs;  
})

console.log(totalSeconds);
var avgSeconds = totalSeconds / times.length;
console.log(avgSeconds); 

我找到了一种方法来实现这个目标,通过分割&#34;时间&#34;来解决毫秒问题。字符串:

var times= [ '00:00:03.00', '00:00:05.00', '00:00:02.00', '00:00:06.00']
var totalSeconds = 0;
times.forEach(function(element){
    var timeParts = element.split(":"); //Separate HH mm ss.ff
    var secParts = timeParts[2].split("."); //Separate ss ff
    var secs = Number(timeParts[0]) * 3600 + Number(timeParts[1]) * 60 + 
    Number(secParts [0]); //3600: Seconds in an hour - 60: seconds in a minute
    totalSeconds += secs;  
})

console.log(totalSeconds); //16
var avgSeconds = totalSeconds / times.length;
console.log(avgSeconds);  //4

答案 2 :(得分:0)

对于那些在评论中没有看到的人,我在这里得到了答案:

var times= [ '00:13', '00:06', '07:00', '00:06'],
    date = 0,
    result = '';
function offsetify(t){
    return t < 10 ? '0' + t : t;
}
for(var x = 0; x < times.length; x++ ) {
    var tarr = times[x].split(':');
    date += new Date(0, 0, 0, tarr[0], tarr[1]).getTime();   
}
var avg = new Date(date/times.length);
result = offsetify(avg.getHours()) + ':' + offsetify(avg.getMinutes());
console.log(result);