【发布时间】:2017-05-14 09:43:34
【问题描述】:
PHP 有多种创建时间戳的方法。可用的最精确时间戳是多少?
【问题讨论】:
PHP 有多种创建时间戳的方法。可用的最精确时间戳是多少?
【问题讨论】:
如果精确是指可能的最小时间增量,根据 PHP 手册,您可以获得以微秒为单位的 Unix 时间戳。只要您的操作系统支持gettimeofday() 系统调用。
【讨论】:
microtime(true) 在转换为浮点数时会丢失精度。我认为您最终只能获得 1/10 毫秒的精度。
常用的方法是microtime(true),但它可能不是最精确的选择。
DateTime 默认不是很好,会给你秒。
$ php -r 'echo (new \DateTime())->format("U.u");'
1483069259.000000
microtime(true) 更好,给你大约微秒,但浮点精度会做一些舍入。
$ php -r 'echo microtime(true);'
1483069130.6427
gettimeofday() 更好,并为您提供精确的微秒。您可以使用microseconds(false),但处理输出更难。
$ php -r 'echo implode(".", array_slice(gettimeofday(), 0, 2));'
1483070039.572630
所以最好的 \DateTime 实例是完整的微秒精度:
\DateTime::createFromFormat("U.u", implode(".", array_slice(gettimeofday(), 0, 2)))
【讨论】: