PHP获取从开始时间到结束时间的总工作时数,其中包含day的多个条目


php get total worked hours from start time to end time with multiple entries for day

我正在尝试建立一个考勤系统。当试图得到一个小时的报告,由一个用户为给定的一天,我需要工作的总小时数。我有一个startTime(时间戳)和endTime(时间戳),但我可以有多个条目的用户在任何给定的一天,他们在时钟去打破时钟然后时钟后和出去吃午饭等。

 array
  (
        [theUser] => Bob Johnson
        [timeId] => 9
        [user_id] => 1
        [weekNo] => 34
        [clockYear] => 2016
        [entryDate] => 2016-08-21
        [startTime] => 2016-08-21 21:57:01
        [endTime] => 2016-08-21 22:45:15
        [updated_at] => 2016-08-21 22:45:15
        [totTime] => 00:48:14
    ) 
    [9] => Array
    (
        [theUser] => Bob Johnson
        [timeId] => 16
        [user_id] => 1
        [weekNo] => 34
        [clockYear] => 2016
        [entryDate] => 2016-08-24
        [startTime] => 2016-08-24 01:00:00
        [endTime] => 2016-08-24 05:15:00
        [updated_at] => 
        [totTime] => 04:15:00
    )
    (
        [theUser] => Bob Johson
        [timeId] => 15
        [user_id] => 1
        [weekNo] => 34
        [clockYear] => 2016
        [entryDate] => 2016-08-24
        [startTime] => 2016-08-24 01:00:00
        [endTime] => 2016-08-24 05:15:00
        [updated_at] => 
        [totTime] => 04:15:00
    )
    (
        [theUser] => Bob Johnson
        [timeId] => 18
        [user_id] => 1
        [weekNo] => 34
        [clockYear] => 2016
        [entryDate] => 2016-08-24
        [startTime] => 2016-08-24 09:59:00
        [endTime] => 2016-08-24 10:45:00
        [updated_at] => 2016-08-24 10:19:31
        [totTime] => 00:46:00
    )

我需要用总工作时间来创建一个新的数组,我想实现这样的东西

         (
                [theUser] = Bob Johnson
                [weekNo] = 34
                [Year] = 2016
                [entryDate] = 2016-08-24
                [totalHoursWorked] = 09:16:00
                [overTime] = 01:16:00
            )

如果我试着服用

,有人能帮我吗?
          $startTime = strtotime($val['startTime']);
          $endTime = strtotime($val['endTime']);
          $tot += $endTime - $startTime;
          echo date('H:i:s', $tot)

在foreach循环中但是我总是得到错误的值

问题出在你的最后一行:echo date('H:i:s', $tot)

你应该用gmdate代替:

echo gmdate('H:i:s', $tot);

或者用简单的数学代码格式化:

$hours = floor($init / 3600);
$minutes = floor(($init / 60) % 60);
$seconds = $init % 60;
echo "$hours:$minutes:$seconds";

使用诸如Carbon之类的库将更方便您的计算和格式化