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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:05:15