You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel中如何计算考勤记录中员工总休息时长(小时:分钟格式)

结论

不需要重新设计考勤表,基于现有数据结构即可直接实现累计休息时长统计需求。

实现思路

你目前的代码只取了第一条休息开始/结束记录,只要改成将所有休息记录按时序两两配对、累加时长即可,具体代码如下:

具体实现代码

// 1. 从集合中过滤出休息相关记录,按时间升序排列
$breakRecords = $attendance->whereIn('attendance_status', ['Start Break', 'End Break'])
    ->sortBy('time_stamp')
    ->values();

$totalBreakSeconds = 0;
$latestStart = null;

// 2. 遍历记录配对计算时长
foreach ($breakRecords as $item) {
    if ($item->attendance_status == 'Start Break') {
        $latestStart = strtotime($item->time_stamp);
    } elseif ($item->attendance_status == 'End Break' && !is_null($latestStart)) {
        $totalBreakSeconds += strtotime($item->time_stamp) - $latestStart;
        $latestStart = null;
    }
}

// 3. 将总秒数转为 小时:分钟 格式
$hours = str_pad(floor($totalBreakSeconds / 3600), 2, '0', STR_PAD_LEFT);
$minutes = str_pad(floor(($totalBreakSeconds % 3600) / 60), 2, '0', STR_PAD_LEFT);
$totalBreak = "{$hours}:{$minutes} total hrs";

边界说明

如果存在有「Start Break」没有对应「End Break」的异常记录(比如员工还在休息中就统计时长),可以根据业务规则调整:如果需要统计未结束的休息时长,可在循环结束后判断$latestStart不为空时,用当前时间减去$latestStart累加至总时长即可。

内容的提问来源于stack exchange,提问作者wenreloz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:48:02