PHP如何将可读时长"23m 10.3s"转换为秒?Carbon是否支持?
将时长字符串转换为秒数的实现方法
Carbon相关说明
Carbon本身并没有直接解析"Xm Ys"这类自由格式时长字符串的内置方法,它的核心定位是日期时间处理,而非通用时长格式的解析转换。
实现方案
方案一:纯PHP自定义解析计算
通过正则表达式提取字符串中的分钟和秒数值,再计算总秒数:
$durationStr = "23m 10.3s"; // 匹配整数分钟数和带小数的秒数 preg_match('/(\d+)m\s*(\d+\.\d+)s/', $durationStr, $matches); if (isset($matches[1], $matches[2])) { $minutes = (int)$matches[1]; $seconds = (float)$matches[2]; $totalSeconds = $minutes * 60 + $seconds; // 输出结果:1390.3 echo $totalSeconds; }
方案二:结合CarbonInterval类处理
如果想借助Carbon的时长处理能力,可以先提取数值,再通过CarbonInterval构建时长实例,最后获取总秒数:
use Carbon\CarbonInterval; $durationStr = "23m 10.3s"; preg_match('/(\d+)m\s*(\d+\.\d+)s/', $durationStr, $matches); if (isset($matches[1], $matches[2])) { // 构建时长实例 $interval = CarbonInterval::minutes($matches[1])->addSeconds($matches[2]); // 获取总秒数 $totalSeconds = $interval->totalSeconds; // 输出结果:1390.3 echo $totalSeconds; }
扩展说明
如果你的时长字符串还可能包含小时(比如"1h 23m 10.3s"),可以调整正则表达式来适配:
preg_match('/(\d+)h?\s*(\d+)m?\s*(\d+\.\d+)s?/', $durationStr, $matches); // 后续计算时补充小时转秒的逻辑:$hours * 3600 + $minutes * 60 + $seconds
内容的提问来源于stack exchange,提问作者Elliott Coe
相关产品推荐
相关产品推荐

