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

PHP秒转MM:SS函数异常求助:JS转PHP后结果不符

问题分析与解决

你的问题出在JavaScript和PHP对「+」运算符的处理逻辑完全不同,导致结果不符合预期。

为什么PHP版本会返回55?

在JavaScript中,当你把数字和字符串(比如:)用+连接时,JS会自动将数字转换为字符串,执行的是字符串拼接操作。但PHP里的+是纯数值加法运算符——如果遇到非数值类型(比如:),PHP会尝试把它转换成数字,而:无法转为有效数字,会被当作0处理。

拆解你的PHP代码执行过程(传入235时):

  1. 首先计算$s %= 60,此时$s变成55;
  2. ($s - ($s%=60))/60 等于 (235 - 55)/60 = 3;
  3. 接下来的+ (9<$s?':':':0'),因为:被转为0,所以这部分相当于加0;
  4. 最后加上$s(也就是55),最终结果是3 + 0 + 55 = 55。

修正后的PHP函数

PHP中要做字符串拼接,得用.运算符而不是+。你可以保留原逻辑的核心,把数值运算和字符串拼接分开:

function fmtMSS($s){
    $seconds = $s % 60;
    $minutes = ($s - $seconds) / 60;
    // 用.做字符串拼接,而不是+
    return $minutes . ($seconds > 9 ? ':' : ':0') . $seconds;
}

或者更简洁的写法,用str_pad来补零,可读性更高:

function fmtMSS($s){
    $minutes = floor($s / 60);
    $seconds = $s % 60;
    return $minutes . ':' . str_pad($seconds, 2, '0', STR_PAD_LEFT);
}

测试传入235,两个函数都会返回3:55,和JavaScript版本的结果一致。

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:19:39