Laravel时间计算问题求助:给定时间数组计算无法正常运行
在Laravel中计算时间数组的总和
嘿,我来帮你搞定这个时间总和的计算问题!针对你给出的$array = [ '00:09:45', '00:50:05', '00:01:05', ]这个时间数组,我有两个实用的方法在Laravel里实现,咱们一步步看:
方法一:用Laravel自带的Carbon类(推荐)
Laravel默认集成了Carbon,用它的CarbonInterval类处理时长累加非常顺手,代码也更优雅:
use Carbon\CarbonInterval; $array = [ '00:09:45', '00:50:05', '00:01:05', ]; // 初始化一个空的时长对象 $totalDuration = CarbonInterval::zero(); foreach ($array as $timeStr) { // 将每个时间字符串转换为CarbonInterval实例 $singleDuration = CarbonInterval::createFromFormat('H:i:s', $timeStr); // 累加到总时长里 $totalDuration->add($singleDuration); } // 格式化为H:i:s的字符串输出 $totalTime = $totalDuration->format('%H:%I:%S'); // 最终输出:01:00:55 echo $totalTime;
这里要注意,CarbonInterval的格式化参数和原生PHP有点区别,%H代表小时,%I是带前导零的分钟,%S是带前导零的秒,这样输出的格式就和你输入的一致啦。
方法二:原生PHP实现(无依赖)
如果不想用Carbon,直接用原生PHP也能轻松搞定,思路是把所有时间转成秒数累加,再转回到时分秒格式:
$array = [ '00:09:45', '00:50:05', '00:01:05', ]; $totalSeconds = 0; foreach ($array as $timeStr) { // 拆分出时、分、秒 list($hours, $minutes, $seconds) = explode(':', $timeStr); // 转换为总秒数并累加 $totalSeconds += $hours * 3600 + $minutes * 60 + $seconds; } // 把总秒数转回时分秒 $hours = floor($totalSeconds / 3600); $minutes = floor(($totalSeconds % 3600) / 60); $seconds = $totalSeconds % 60; // 用sprintf确保每个部分都是两位数 $totalTime = sprintf('%02d:%02d:%02d', $hours, $minutes, $seconds); // 同样输出:01:00:55 echo $totalTime;
这两种方法都能完美解决你的问题,选哪种就看你项目的习惯啦~
内容的提问来源于stack exchange,提问作者Lahiru Prabodha
相关产品推荐
相关产品推荐

