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

PHP中计算数组时间总和:如何获取超24小时的正确结果

解决PHP中时间总和超过24小时的计数问题

我来帮你搞定这个问题——你遇到的核心问题是date()函数的H格式只会返回0-23的小时数,所以当总时长超过24小时时,它会自动把小时数对24取模,导致结果被截断成当天的时间,而不是真实的总时长。

原代码的问题分析

你的代码里,累加得到的sum2其实是正确的总秒数,但最后用date("H:i:s", $sum + $sum2)时,date()是把时间戳对应到具体的日期时间上(比如总秒数相当于第二天的11点04分28秒),所以它只会输出当天的小时部分(11),而不是累计的35小时。

正确的解决方案:直接计算总时长的时、分、秒

我们不需要依赖时间戳和date()函数,而是直接把每个时间转换成秒数累加,再将总秒数拆解成小时、分钟、秒,其中小时可以是任意大于0的数值:

$total = [
    '00:02:55', '00:07:56', '01:03:32', '15:13:34',
    '02:13:44', '03:08:53', '13:13:54'
];

$totalSeconds = 0;

// 遍历所有时间,累加总秒数
foreach ($total as $timeStr) {
    // 拆分时间字符串为小时、分钟、秒
    list($hours, $minutes, $seconds) = explode(':', $timeStr);
    // 转换成秒数并累加
    $totalSeconds += $hours * 3600 + $minutes * 60 + $seconds;
}

// 计算总小时数
$totalHours = floor($totalSeconds / 3600);
// 剩余秒数计算分钟
$remainingAfterHours = $totalSeconds % 3600;
$totalMinutes = floor($remainingAfterHours / 60);
// 最后剩余的秒数
$totalSecondsFinal = $remainingAfterHours % 60;

// 格式化输出,确保分钟和秒是两位数(比如5秒显示为05)
$formattedTotal = sprintf('%02d:%02d:%02d', $totalHours, $totalMinutes, $totalSecondsFinal);

echo $formattedTotal; // 输出:35:04:28

代码逻辑说明

  1. 累加总秒数:把每个H:i:s格式的时间拆成时、分、秒,转换成秒数后累加,得到所有时间的总秒数。
  2. 拆解总时长:
    • 总小时数 = 总秒数 ÷ 3600(取整数部分)
    • 剩余秒数 = 总秒数 % 3600
    • 总分钟数 = 剩余秒数 ÷ 60(取整数部分)
    • 最终秒数 = 剩余秒数 % 60
  3. 格式化输出:用sprintf确保分钟和秒始终是两位数,小时数则显示真实的累计值,哪怕超过24。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:15:30