Есть ли у PHP функция для агрегирования значений времени из массива?

Поэтому мой запрос выглядит так:

SELECT TIMEDIFF('24:00:00',(TIMEDIFF('22:00:00',TIME(end)))) AS time FROM sworkingtime WHERE user='magdalena' AND type='work' AND start BETWEEN '2014-03-01' AND '2014-03-28' AND (HOUR(`end`) > 22 OR HOUR(`end`) < 4) AND completed=1 

Мой запрос возвращает это:

 02:02:36 03:17:24 03:07:03 02:24:17 03:14:09 

Есть ли способ изменить этот запрос, чтобы вернуть только SUM из этих полей, так что только одно поле?

спасибо

Solutions Collecting From Web of "Есть ли у PHP функция для агрегирования значений времени из массива?"

Нет, в этом случае нет специальной функции сумм – особенно обращая внимание на то, что вам нужно некоторое суммирование времени, а не просто операция.

Для этого вы можете применить обратный вызов для своего массива. Очень мощная функция для этого – array_reduce() . Для работы с интервалами дат вы можете использовать API DateTime , например:

 $data = [ ['time'=>'02:02:36'], ['time'=>'03:17:24'], ['time'=>'03:07:03'] ]; $time = array_reduce($data, function($c, $x) { $x = explode(':', $x['time']); $c = explode(':', $c); return (new DateTime('2000-01-01')) ->add(new DateInterval('PT'.(int)$c[0].'H'.(int)$c[1].'M'.(int)$c[2].'S')) ->add(new DateInterval('PT'.(int)$x[0].'H'.(int)$x[1].'M'.(int)$x[2].'S')) ->format('H:i:s'); }, '00:00:00'); 

– это приведет к "08:27:03" виде строки. Но если вы хотите получить объект, удалите вызов format() .

Вы можете выполнить итерацию массива и использовать эту функцию для суммирования суммы времени php