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

PHP实现员工在线工时表多段工时相加并输出总时长

解决方法:将多段HH:MM格式时间累加并输出总时长

既然你的变量都是HH:MM格式的字符串,最简便的方式是先把所有时间转换成总分钟数来累加,最后再转回到小时:分钟格式——这样能完美避开直接处理小时分钟相加时的进位问题,逻辑清晰又不容易出错。

步骤1:写一个辅助函数转换时间为总分钟数

先搞个小函数,把单个HH:MM字符串转成对应的总分钟数:

function timeToMinutes($timeStr) {
    list($hours, $minutes) = explode(':', $timeStr);
    return (int)$hours * 60 + (int)$minutes;
}

这个函数会把输入的字符串按冒号拆分,分别转成整数后计算总分钟数,比如07:20就会变成7*60+20=440分钟。

步骤2:累加所有工作日的总分钟数

把五个变量都用上面的函数转换后求和:

$totalMinutes = timeToMinutes($MondaysActual)
              + timeToMinutes($TuesdaysActual)
              + timeToMinutes($WednesdaysActual)
              + timeToMinutes($ThursdaysActual)
              + timeToMinutes($FridaysActual);

步骤3:把总分钟数转回HH:MM格式

最后把总分钟数拆分回小时和分钟,注意分钟数要补前导零(比如5分钟要显示成05):

$totalHours = floor($totalMinutes / 60);
$remainingMinutes = $totalMinutes % 60;
$totalTime = sprintf("%d:%02d", $totalHours, $remainingMinutes);

这里用sprintf("%02d")来保证分钟数始终是两位,避免出现3:5这种不规范的格式,会自动变成3:05。

完整示例代码

把上面的步骤整合起来就是:

function timeToMinutes($timeStr) {
    list($hours, $minutes) = explode(':', $timeStr);
    return (int)$hours * 60 + (int)$minutes;
}

// 假设你的变量已经有值
$MondaysActual = "07:20";
$TuesdaysActual = "08:15";
$WednesdaysActual = "06:50";
$ThursdaysActual = "07:45";
$FridaysActual = "08:00";

$totalMinutes = timeToMinutes($MondaysActual)
              + timeToMinutes($TuesdaysActual)
              + timeToMinutes($WednesdaysActual)
              + timeToMinutes($ThursdaysActual)
              + timeToMinutes($FridaysActual);

$totalHours = floor($totalMinutes / 60);
$remainingMinutes = $totalMinutes % 60;
$totalTime = sprintf("%d:%02d", $totalHours, $remainingMinutes);

echo $totalTime; // 输出示例:38:10

这个方法的好处是逻辑简单,不管累加多少天的时间都能轻松处理,而且格式输出规范,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:26:04