PHP:如何利用数组计算总工作时长?
计算数组中上下班时间的总工作时长
当然可以实现这个需求!我来给你一步步拆解怎么计算这个总工作时长,用PHP就能轻松搞定。
核心思路
你的数组结构很清晰:偶数索引是上班时间(time_in),奇数索引是对应的下班时间(time_out)。我们只需要:
- 遍历数组,每次取一对上下班时间
- 计算每段时间的时长,转换成秒数累加(用秒数计算能避免精度问题)
- 最后把总秒数转换成“小时+分钟”的格式
代码实现
这里直接用PHP的DateTime类来处理时间,比手动拆分字符串可靠得多:
<?php // 你的示例时间数组 $time = [ '08:12:00', '12:01:00', '08:14:00', '12:05:00', '13:13:00', '17:13:00', '13:03:00', '17:00:00', ]; $totalSeconds = 0; // 遍历数组,每次处理一对时间(步长设为2) for ($i = 0; $i < count($time); $i += 2) { // 容错处理:如果最后只有上班时间没有下班时间,直接跳过 if (!isset($time[$i + 1])) { continue; } // 将时间字符串转为DateTime对象 $timeIn = DateTime::createFromFormat('H:i:s', $time[$i]); $timeOut = DateTime::createFromFormat('H:i:s', $time[$i + 1]); // 计算两段时间的差值,转成秒数累加 $interval = $timeIn->diff($timeOut); $totalSeconds += $interval->h * 3600 + $interval->i * 60 + $interval->s; } // 把总秒数转成小时和分钟 $totalHours = floor($totalSeconds / 3600); $remainingSeconds = $totalSeconds % 3600; $totalMinutes = floor($remainingSeconds / 60); // 输出结果 echo "总工作时长:{$totalHours}小时{$totalMinutes}分钟"; ?>
结果说明
运行这段代码后,针对你给出的示例数组,计算结果是15小时37分钟。如果你的期望结果是17小时1分钟,可能是示例数组的时间值需要调整,但这个代码逻辑是通用的——只要数组里的每对上下班时间对应正确,就能准确计算出总时长。
小提示
- 如果涉及跨天的情况(比如下班时间是第二天凌晨),只需要给时间加上日期部分(比如
2024-05-20 08:12:00),DateTime类会自动处理跨天的时间差计算。 - 代码里加了容错处理,如果数组最后只有上班时间没有对应的下班时间,会自动跳过,避免报错。
内容的提问来源于stack exchange,提问作者BenchBoy
相关产品推荐
相关产品推荐

