计算PHP MySQL中的考勤时间

时间:2018-05-10 07:41:26

标签: php mysql

我正在和laravel一起工作,我有一张桌子,上面有所有用户参加。 每行都有一个标志,说明用户是否登录或退出。我想计算用户的总工作时间。

这是我的表和样本数据

id | user_id |      date     |   timestamp   | status |
 1 |    1    |   2018-05-10  |    17:15:31   |   out  |
 1 |    1    |   2018-05-10  |    13:15:31   |   in   |
 1 |    1    |   2018-05-10  |    12:15:31   |   out  |
 1 |    1    |   2018-05-10  |    08:01:31   |   in   |

我想计算总工时

$logs = DB::table('attendances as at')
        ->join('infos as in','in.user_id','=','at.user_id')
        ->select('in.name','in.avatar','at.*')
        ->orderBy('id','desc')
        ->where('at.user_id',$id)
        ->get();

 $total_hours = [];

    for($i=0; $i < count($logs)-1; $i++ ){

         if($logs[$i]->status == 'out'){
           $dattime1 = new DateTime($logs[$i]->dt.' '. $logs[$i]->time);
           $dattime2 = new DateTime($logs[$i+1]->dt.' '. $logs[$i+1]->time);

            $total_hours[] = $dattime1 ->diff($dattime2);
         }

    }

 $working_hours = array_sum($total_hours);

这是获得准确结果的最佳方法吗?请帮忙。 感谢

1 个答案:

答案 0 :(得分:1)

你能这样试试吗?

$time1 = "17:15:00";
$time2 = "00:30:00";

$strtotime1 = strtotime($time1);
$strtotime2 = strtotime($time2);
 $o = ($strtotime1) + ($strtotime2);
echo $time = date("h:i:s A T",$o);

输出将如下:

05:45:00 PM UTC