PHP:如何获取数组中的时差

时间:2019-07-09 12:15:04

标签: php arrays date datetime

我的应用有 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

是否有可能使用数组获得时差?任何帮助表示赞赏。

2 个答案:

答案 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)

您可以将foreachstrtotime一起使用

$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);

DEMO