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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:03:37