Laravel中如何实现两个秒/分钟时间值相加并输出分秒格式结果
实现两个带单位时间值相加并输出分秒格式的方案
方案一:基于Carbon实现(优先推荐,匹配你现有的代码依赖)
你现有代码已经在使用Carbon库,直接用CarbonInterval解析时间间隔后相加即可,无需自行处理单位转换和进位逻辑:
<?php use Carbon\CarbonInterval; use Carbon\CarbonInterface; // 输入的两个带单位时间值 $first = '16 seconds'; $second = '2 minutes'; // 解析为时间间隔对象 $interval1 = CarbonInterval::make($first); $interval2 = CarbonInterval::make($second); // 两个间隔相加 $total = $interval1->add($interval2); // 按要求格式化输出 $result = $total->forHumans([ 'parts' => 2, // 最多展示分、秒两个单位 'join' => ', ', // 单位间用逗号空格连接 'syntax' => CarbonInterface::DIFF_ABSOLUTE, 'options' => CarbonInterface::ROUND, // 避免出现小数 ]); echo $result; // 输出:2 minutes, 16 seconds
方案二:原生PHP实现(无需依赖第三方库)
如果不想引入Carbon依赖,可以自行解析单位转换为秒数相加后再格式化:
function addTime(string $timeA, string $timeB): string { // 自定义方法:将带单位的时间字符串转换为总秒数 $timeToSeconds = function(string $timeStr): int { [$num, $unit] = explode(' ', trim($timeStr)); return str_starts_with($unit, 'minute') ? (int)$num * 60 : (int)$num; }; $totalSeconds = $timeToSeconds($timeA) + $timeToSeconds($timeB); $minutes = floor($totalSeconds / 60); $remainSeconds = $totalSeconds % 60; $resParts = []; if ($minutes > 0) { $resParts[] = $minutes . ' ' . ($minutes === 1 ? 'minute' : 'minutes'); } if ($remainSeconds > 0) { $resParts[] = $remainSeconds . ' ' . ($remainSeconds === 1 ? 'second' : 'seconds'); } return implode(', ', $resParts); } // 测试调用 echo addTime('16 seconds', '2 minutes'); // 输出:2 minutes, 16 seconds
注意:原生方案默认仅支持分钟、秒两种单位,如有小时等其他单位需求,可扩展
timeToSeconds方法内的单位判断逻辑。
内容的提问来源于stack exchange,提问作者devv
相关产品推荐
相关产品推荐

