php 中 microtime() 返回的字符串包含空格分隔的两个部分,直接参与数值运算会触发警告。解决方法是调用 microtime(true) 获取浮点数,或在计算前使用 explode 拆分并累加两部分。

microtime() 默认返回值的结构是什么
默认情况下,microtime() 返回一个格式为 "0.123456 789012" 的字符串。第一部分是小数秒,第二部分是自 Unix 纪元以来的秒数。如果直接将这个字符串用于数学运算,PHP 会在转换时截断小数点后的内容,导致精度丢失并产生警告。

$start = microtime(); $end = microtime(); // 错误:直接相减会触发 Warning $diff = $end - $start;
上述代码在 PHP 8.0+ 版本中会明确抛出警告。因为 microtime() 返回的是字符串,而减法运算符期望操作数是数字类型。这种隐式转换不仅效率低,还会破坏代码的健壮性。
立即学习“PHP免费学习笔记(深入)”;
如何正确计算时间差
最推荐的做法是使用 microtime(true)。该参数强制函数返回浮点数,可以直接进行加减乘除运算,且保留了微秒级的精度。这种方式代码简洁,性能最优,是处理高精度计时的标准做法。

$start = microtime(true);
// ... 执行某些操作 ...
$end = microtime(true);
$duration = $end - $start;
echo "耗时: {$duration} 秒";
如果必须使用默认的字符串返回值,可以手动解析。通过 explode(' ', microtime()) 将字符串拆分为数组,然后将两个部分相加得到总秒数。这种方法虽然可行,但增加了不必要的代码复杂度,通常不推荐在生产环境中使用。
为什么不建议使用 gettimeofday()
虽然 gettimeofday() 也能获取高精度时间,但它返回的是一个关联数组或对象,访问起来比浮点数更繁琐。在现代 PHP 开发中,除非有特殊的系统级需求,否则 microtime(true) 是处理应用层计时任务的最佳选择。它直接提供了所需的数值类型,避免了任何类型转换的麻烦。



















