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

PHP将超24小时时间字符串转换为小时数的简便方法

解决超24小时累计耗时转小时数值的简便方案

这个问题其实很常见,尤其是处理累计耗时这类超24小时的时间格式时,strtotime()确实会因为格式不符合标准时间范围而返回false。这里给你两个简便的PHP实现方案,首选第一种,直观又高效:

方案一:直接拆分时间分量计算

这种方法不需要依赖任何时间处理函数,直接把字符串按冒号分割成小时、分钟、秒,然后转换成总小时数,逻辑清晰且兼容性拉满:

function durationToTotalHours($duration) {
    // 拆分时、分、秒
    list($hours, $minutes, $seconds) = explode(':', $duration);
    // 计算总小时数:小时 + 分钟转小时 + 秒转小时
    return (int)$hours + ((int)$minutes / 60) + ((int)$seconds / 3600);
}

// 测试你的示例数据
$testCases = ["84:00:00", "14:30:00", "20:00:00", "02:00:00", "120:00:00"];
foreach ($testCases as $case) {
    echo "{$case} → " . durationToTotalHours($case) . "\n";
}

运行结果正好符合你的需求:

84:00:00 → 84
14:30:00 → 14.5
20:00:00 → 20
02:00:00 → 2
120:00:00 → 120

方案二:利用DateInterval处理(可选)

如果偏好使用PHP的内置时间类,也可以通过DateInterval来实现,但需要先把HH:MM:SS格式转成可解析的字符串:

function durationToTotalHoursWithInterval($duration) {
    list($hours, $minutes, $seconds) = explode(':', $duration);
    // 构造DateInterval可识别的字符串
    $intervalStr = "{$hours} hours {$minutes} minutes {$seconds} seconds";
    $interval = DateInterval::createFromDateString($intervalStr);
    // 计算总小时数
    return $interval->h + ($interval->i / 60) + ($interval->s / 3600);
}

这个方案的优势是可以利用DateInterval的其他特性,但对于你的需求来说,方案一更直接轻便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:11:31