14、PHP 原生魅力 - 系统功能 - 获取系统的高精度时间
单调时钟是一种时间源,它不会因为网络时间协议 (NTP) 调整或夏令时转换等原因而向前或向后跳跃。
当需要计算两个时间点之间的经过时间时,需要保存起始时间和结束时间来计算两者之差。这段时间的计算不应受到外部行为的影响,比如由外部软件(如 NTP)进行的时间修改或时间调整。为了确保这一点,使用单调递增的时钟(如 hrtime()
提供的)是更合适的选择,因为它保证了时间的连续性和不会倒退。
hrtime()
返回一个由两个整数组成的数组:
- 秒,(索引 0 的元素)
- 纳秒,(索引 1 的元素)
<?php
$monotonictime = hrtime();
print_r($monotonictime);
输出如下:
$ php 14-hrtime.php
Array
(
[0] => 12947
[1] => 319173651
)
hrtime()
函数也可能有一个可选的第二个布尔参数 $as_number
。如果此参数设置为 true
,那么hrtime()
函数将返回一个整数值(纳秒数),而不是一个形如 [seconds, nanoseconds]
的整数数组。使用 hrtime(true)
或许会让计算经过时间的过程更简单,就像下面的例子所示:
<?php
$start = hrtime(true);
sleep(2);
$end = hrtime(true);
$time = $end - $start;
$timeInSeconds = $time / 1_000_000_000;
// 或者如下简短的写法
// $timeInSeconds = $time / 1e+9;
echo '执行时间 ' . $timeInSeconds . ' 秒' . PHP_EOL;
输出如下:
$ php 14-hrtime.php
执行时间 2.00015457 秒
请登录后再评论