我有一些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']
谢谢!
答案 0 :(得分:0)
只是想告诉你一种方法,你可以使用时间输入元素
将时间转换为良好的计算值输入足够智能,可以确定如果您发送00:03
或00: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);