14、PHP 原生魅力 - 系统功能 - 获取系统的高精度时间

作者: 温新

图书: 【原生 PHP 魅力】

阅读: 229

时间: 2024-11-21 12:05:58

单调时钟是一种时间源,它不会因为网络时间协议 (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 秒
请登录后再评论