我的应用有 time_in 和 time_out 。
我有一个数组,其键为0,2,4..
,所以这是 time_in ,而1,3,5..
是 time_out 。
我想获得总工作时间。
这是下面的示例数组:
$time = [
[0] => 08:12:00,
[1] => 12:01:00
[2] => 08:14:00,
[3] => 12:05:00,
[4] => 13:13:00,
[5] => 17:13:00,
[6] => 13:03:00,
[7] => 17:00:00,
];
结果: 17 hours and 1 minute
是否有可能使用数组获得时差?任何帮助表示赞赏。
答案 0 :(得分:1)
可能会想使用date()输出时间,但是date()用于日期而不是输出时间。
如果使用日期,则24小时以上都不正确。
而是使用数学来计算时间。
foreach(array_chunk($time, 2) as $t){
$seconds[] = strtotime($t[1])-strtotime($t[0]);
}
echo "hours: " . floor(array_sum($seconds)/3600) . "\n";
echo "minutes: " . (array_sum($seconds)%3600)/60 . "\n";
请参见示例,我还添加了date()只是为了证明它不是使用的方法:
https://3v4l.org/m2E27
答案 1 :(得分:0)
您可以将foreach
与strtotime
一起使用
$sum = 0;
foreach($time as $k => $v){
if($k % 2 == 1){
$sum += strtotime($time[$k])-strtotime($time[$k-1]);
}
}
echo date("H:i:s", $sum);
根据Andreas的建议,更新了答案:-
$seconds = 0;
foreach($time as $k => $v){
if($k % 2 == 1){
$seconds += strtotime($time[$k])-strtotime($time[$k-1]);
}
}
echo floor($seconds / 3600) . gmdate(":i:s", $seconds % 3600);