从MySQL查询返回的PHP平均时间

时间:2014-10-01 18:56:45

标签: php mysql

我按照时间格式从查询中返回3次: ○点31分36秒 ○点32分58秒 零时11分59秒

我希望以相同的格式获得这些时间的平均值。

目前我正在尝试使用

date('H:i:s', array_sum(array_map('strtotime', $results->[6])) / count($results->[6]))

但我得到的输出是19:00:00如果我将输出增加到&m; / d / y H:i:s'我的时间是12/31/69 19:00:00。如果我删除' strtotime',我仍会得到相同的输出。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

而不是依靠PHP来执行AVG聚合,而是使用更高效的DB:

SELECT sec_to_time(avg(time_to_sec(<time>))) from <table>

答案 1 :(得分:0)

适用于我的解决方案

<?php  $totalTime = 0;
        $sql = 'SELECT * FROM ' . TABLE_HTA . ' WHERE date_time >= curdate() AND employee_id = "4104" ORDER BY order_id ASC';

        $orders = $db->Execute($sql);
        if($orders->RecordCount() > 0) {
        while(!$orders->EOF) {
        $totalRuns = $totalRuns + 1;
        $str_time = $orders->fields['otd_time'];
        $str_time = preg_replace("/^([\d]{1,2})\:([\d]{2})$/", "00:$1:$2", $str_time);
        sscanf($str_time, "%d:%d:%d", $hours, $minutes, $seconds);
        $time_seconds = $hours * 3600 + $minutes * 60 + $seconds;
        $orders->MoveNext();
            }
           }
        $otdAverage = $totalTime / $totalRuns;
        echo gmdate("H:i:s", $otdAverage);?>

输入是:
○点31分36秒
○点32分58秒
〇点11分59秒
○时22分52秒
0时32分08秒
〇时22分19秒
○时51分46秒
输出是00:29:22
phpMyAdmin sql查询输出为00:29:22
由于在某处进行舍入,因此相差1秒。谢谢你的帮助。希望这有助于其他人!