php生成的13位时间戳只有12位,是因为默认的时间精度为秒,而13位时间戳需要毫秒级精度。解决办法是调用 microtime(true) 获取带小数的微秒时间戳,乘以 1000 并取整,即可得到正确的13位整数时间戳。

如何正确生成13位毫秒时间戳
直接回答:使用 microtime(true) * 1000 配合 intval() 或 floor() 转换,即可获得标准的13位毫秒时间戳。

$timestamp = intval(microtime(true) * 1000); echo $timestamp; // 输出示例: 1715623456789
上述代码中,microtime(true) 返回一个浮点数,格式为 "微秒 秒"。乘以 1000 后,小数点向右移动三位,将微秒部分转换为毫秒的整数部分。最后使用 intval() 去除可能残留的小数部分,确保结果为纯整数。这是前端与后端交互时最常用的时间戳格式。
立即学习“PHP免费学习笔记(深入)”;
为什么不能用 time() 函数
直接回答:time() 函数只返回秒级时间戳(10位),无法直接通过简单乘法得到13位时间戳,必须依赖微秒函数。

$sec = time(); $ms = microtime(true); echo $sec; // 10位,如 1715623456 echo $ms * 1000; // 13位+小数,如 1715623456.123
time() 返回的是自 Unix 纪元以来的秒数,精度仅为秒。如果直接用 time() * 1000,虽然数值上变成了13位,但末尾三位永远是000,丢失了毫秒信息,且在某些高精度场景下会导致逻辑错误。因此,必须使用 microtime(true) 来获取包含毫秒信息的浮点数,再进行转换。
不同输入下的时间戳长度验证
直接回答:在 PHP 中,无论当前时间是多少,经过 intval(microtime(true) * 1000) 处理后,结果始终稳定为13位整数,不会出现12位或14位的情况,除非系统时间被严重篡改或处于极早期/极晚期。
为了验证这一结论,我们可以观察不同时间点的输出。例如,在2024年5月,时间戳约为171xxxxxxx xxx。乘以1000后,变为171xxxxxxxxxxx,共13位。如果是在2001年,时间戳约为97xxxxxx xxx,乘以1000后为97xxxxxxxxx,此时为11位。但在现代互联网应用中,我们通常处理的是2001年之后的时间,因此13位是标准形态。若需兼容更早的时间,可检查字符串长度,但常规业务无需担心此问题。



















