如何在PHP中获取纳秒精度的时间?

33

在PHP中是否可能实现这个功能?

如果不行,那么可用的最高精度是什么?


只是出于好奇,你为什么需要PHP中的纳秒精度? - user229044
2
我正在进行涉及时间同步的工作,其中一个程序询问远程服务器的时间。Java可以以纳秒为单位给出时间,因此我认为如果我能让PHP也做到这一点而不浪费额外的精度,那就很棒了。 - Matt
3个回答

44

microtime 函数是您需要寻找的。

PHP 没有比微秒更高精度的函数。

如果您正在运行 Linux,则可以使用system函数直接从机器获取值:

$nanotime = system('date +%s%N');
%s 是表示秒数的变量,后接%N 表示纳秒数。

1
明白了,我认为应该是 date +%s%N,因为 %N 不会显示秒部分。 - Matt
7
只是出于好奇:像 system 这样的系统调用需要生成一个 shell 并将输出返回给 PHP。那不会花费比一纳秒更多的时间吗?如果是这样,那么它不会打破以纳秒精度找到时间的目的吗?请给予建议。 - Manu Manjunath
system() 函数用于输出,而 exec('date +%s%N') 更为准确。 - andser
1
三思而后行,你真的需要纳秒级别的精度吗?因为这会导致性能下降: exec('date +%s%N'):3.1263501644135 秒; round(microtime(true) * 1000):0.0062530040740967 秒; 在调用这些函数的1000个周期中进行了测试。 - andser
有趣的是,PHP确实实现了time_nanosleep()函数,这是我知道的唯一暴露纳秒的函数。 - jpschroeder
显示剩余4条评论

17

这应该是被接受的答案,因为hrtime()的文档说“以[秒,纳秒]的形式返回整数数组”。 - Alexandre Huat

14

microtime() 是 PHP 词汇中最高精度的函数。如果您需要纳秒级别的准确度,您还可以使用 Unix date 并指定 %N 格式来进行系统调用。Unix ntp_gettime() 具有更高的分辨率,并返回抖动/漂移/稳定性/偏移/校准数据。


啊,我本来希望有比那更高的东西=[ - Matt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接