使用 hrtime() 计算函数执行毫秒耗时的标准做法是:在调用前后分别获取高精度时间戳,相减后乘以 1000 并四舍五入。由于 hrtime() 返回的是纳秒级精度,直接运算即可得到精确到微秒甚至纳秒的耗时,通过简单的数学转换即可获得毫秒值。

hrtime(true) 与 microtime(true) 的区别是什么
主要区别在于精度和系统开销。microtime(true) 返回浮点数,受系统时钟分辨率限制(通常为 1-15 毫秒),且可能因 NTP 调整出现跳变;hrtime(true) 返回整数(纳秒),提供硬件级高精度,不受系统时钟漂移影响,适合短耗时测量。

$start = hrtime(true);
// ... 执行代码 ...
$end = hrtime(true);
$duration_ms = round(($end - $start) / 1000000, 3); // 转换为毫秒
echo "耗时: {$duration_ms} ms";
预期输出示例:
耗时: 0.125 ms
耗时: 1.450 ms
立即学习“PHP免费学习笔记(深入)”;
如何处理跨时区或夏令时导致的计时误差
hrtime()基于单调时钟(Monotonic Clock),不随系统时间、时区或夏令时变化而改变,因此天然免疫此类误差。相比之下,time() 或 date() 依赖墙钟时间,可能在夏令时切换时产生 1 小时偏差,但 hrtime() 仅记录相对流逝时间,确保测量准确性。

// 错误示范:使用 time() 可能导致负数或巨大偏差
$start = time();
sleep(1);
$end = time();
// 若期间发生夏令时切换,$end - $start 可能为 3600 或 7200
// 正确做法:始终使用 hrtime()
$start_ns = hrtime(true);
sleep(1);
$end_ns = hrtime(true);
$diff_s = ($end_ns - $start_ns) / 1e9;
echo sprintf("%.6f seconds", $diff_s);
预期输出示例:
1.000123 seconds
0.000456 seconds



















