如何在PHP数组中求和时间值

时间:2018-11-28 05:16:24

标签: php mysql arrays

我正在根据客户端ID从我的数据库中获取数据。客户ID的工作时间不同,例如:

00:15:00 00:20:00 等

这不是数组 我将其作为动态数组

cbMyDataContainer = segment->construct<cbMyDataContainerType>
   ("MyDataContainerCircularBuffer")(CONTAINER_SIZE, alloc_inst);

显示此结果:

{{1}}

我想一直累加。 我尝试了很多次,但是没有按照时间显示输出。 请帮助

1 个答案:

答案 0 :(得分:2)

这是获取总和的一种方法,使用strtotime将时间转换为秒。请注意,由于strtotime会产生一个相对于Unix纪元的时间戳,因此您需要从每个值中减去一天的开始时间(strtotime('00:00')),以获得时间的秒数:

$time = array
(
 '00:20:00',
 '00:15:00',
 '00:20:00',
 '00:20:00',
 '00:55:00',
 '00:05:00'
);
$time_in_secs = array_map(function ($v) { return strtotime($v) - strtotime('00:00'); }, $time);
$total_time = array_sum($time_in_secs);
$hours = floor($total_time / 3600);
$minutes = floor(($total_time % 3600) / 60);
$seconds = $total_time % 60;
echo "Total time is "
   . str_pad($hours, 2, '0', STR_PAD_LEFT)
   . ":" . str_pad($minutes, 2, '0', STR_PAD_LEFT) 
   . ":" . str_pad($seconds, 2, '0', STR_PAD_LEFT) . "\n";

输出:

Total time is 02:15:00

Demo on 3v4l.org

您还可以通过使用array_reduce而不是array_maparray_sum来计算$total_time来简化代码:

$total_time = array_reduce($time, function ($c, $v) { return $c + strtotime($v) - strtotime('00:00'); }, 0);

Alternate demo