求 hh:mm:ss 的时间平均值

2024-01-24

我有这个小提琴可以计算以毫秒为单位的平均时间。但是,我的数据库以 hh:mm:ss 格式存储数据。fiddle http://jsfiddle.net/3yVMK/1/

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);

我需要确保何时平均秒数(例如 8.75),然后平均值返回为 00:00:9 使用这样的数组:

var times= [ '00:00:03', '00:00:05', '00:00:020', '00:00:07']

有人可以帮我修改它以正确舍入 hh:mm:ss 格式吗?谢谢。


您可以获取秒数,舍入该值并构建一个新的平均时间字符串。

function getAverageTime(array) {
    var times = [3600, 60, 1],
        parts = array.map(s => s.split(':').reduce((s, v, i) => s + times[i] * v, 0)),
        avg = Math.round(parts.reduce((a, b) => a + b, 0) / parts.length);

    return times
        .map(t => [Math.floor(avg / t), avg %= t][0])
        .map(v => v.toString().padStart(2, 0))
        .join(':');
}

console.log(getAverageTime(['00:00:03', '00:00:05', '00:00:020', '00:00:07']));
console.log(getAverageTime(['00:00:03', '00:30:05', '00:30:020', '03:00:07']));

ES5

function getAverageTime(array) {
    var times = [3600, 60, 1],
        parts = array.map(function (s) {
            return s.split(':').reduce(function (s, v, i) {
                return s + times[i] * v;
            }, 0);
        }),
        avg = Math.round(parts.reduce(function (a, b) {
            return a + b;
        }, 0) / parts.length);

    return times
        .map(function (t) {
            var value = Math.floor(avg / t);
            avg %= t;
            return value;
        })
        .map(function (v) {
            return v.toString().padStart(2, 0);
         })
        .join(':');
}

console.log(getAverageTime(['00:00:03', '00:00:05', '00:00:020', '00:00:07']));
console.log(getAverageTime(['00:00:03', '00:30:05', '00:30:020', '03:00:07']));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

求 hh:mm:ss 的时间平均值 的相关文章

随机推荐