PHP秒转MM:SS函数异常求助:JS转PHP后结果不符
问题分析与解决
你的问题出在JavaScript和PHP对「+」运算符的处理逻辑完全不同,导致结果不符合预期。
为什么PHP版本会返回55?
在JavaScript中,当你把数字和字符串(比如:)用+连接时,JS会自动将数字转换为字符串,执行的是字符串拼接操作。但PHP里的+是纯数值加法运算符——如果遇到非数值类型(比如:),PHP会尝试把它转换成数字,而:无法转为有效数字,会被当作0处理。
拆解你的PHP代码执行过程(传入235时):
- 首先计算
$s %= 60,此时$s变成55; ($s - ($s%=60))/60等于(235 - 55)/60 = 3;- 接下来的
+ (9<$s?':':':0'),因为:被转为0,所以这部分相当于加0; - 最后加上
$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
相关产品推荐
相关产品推荐

