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
相关产品推荐
相关产品推荐

