时间平均值(小时)



我想得到一个平均小时数,但我遇到了问题,因为如果我使用DateTime.add()对象在时间超过24小时时添加时间,它会将时间转换为"天"。基本上,我只想得到这些时间的平均值(小时)。请帮忙。

$time = array();
$time[] = '00:00:58';
$time[] = '00:45:08';
$time[] = '00:00:49';
$time[] = '00:11:26';
$time[] = '02:34:39';
$time[] = '02:18:24';
$time[] = '02:24:11';
$time[] = '01:23:19';
$time[] = '00:27:30';
$time[] = '02:14:50';
$time[] = '00:48:47';
$time[] = '02:19:52';
$time[] = '02:04:29';
$time[] = '01:08:46';
$time[] = '00:06:57';
$time[] = '00:35:31';
$time[] = '02:16:59';
$time[] = '02:23:33';
$time[] = '02:36:30';
$time[] = '02:11:47';
$time[] = '02:40:44';
$time[] = '02:03:42';
$time[] = '01:45:50';

试试这个,

$total_time=0;
foreach($time as $t){
     $total_time+=strtotime($t)-1373241600;
}

所以$total_time将是一个整数,您可以将其除以3600和count($time),得到平均小时数:)

$average_time = ($total_time/count($time))/3600;

试试这个(注意5.3+中提供了闭包):

$timestamps = array_map(function($a){return strtotime($a);}, $time);
$avg = (array_sum($timestamps)/count($timestamps))/3600;

如果您不想依赖时区设置,减去当天的时间戳,或者对strtotime的迟缓感到恼火,请使用简单的数学方法:

$timestamps = array_map(function($item){
    list($h, $m, $s) = explode(':', $item);
    return intval($h) * 3600 + intval($m) * 60 + intval($s);
}, $time);
$avg = ceil(array_sum($timestamps)/count($timestamps));
echo gmdate('H:i:s', $avg);

最新更新