gettimeofday 函数返回当前时间的微秒级别的时间信息,包含秒(seconds)和微秒(microseconds)两个部分。它返回的是一个关联数组,结构如下:
array(
"sec" => 秒数,
"usec" => 微秒数,
"minuteswest" => 当前时区与UTC时间的分钟差,
"dsttime" => 夏令时标志
)
在计算时间差时,我们主要关注sec和usec两个值。
思路是:
在两个时间点调用gettimeofday(true)获取时间戳(此时返回浮点数,秒 + 微秒的精度)。
用结束时间减去开始时间,得到精确的秒数差值,支持小数点后微秒级别。
<?php
// 获取开始时间
$start = gettimeofday(true);
// 模拟耗时操作
usleep(500000); // 500毫秒
// 获取结束时间
$end = gettimeofday(true);
// 计算时间差,单位为秒,支持微秒
$elapsed = $end - $start;
echo "执行时间:{$elapsed} 秒\n";
?>
这段代码会输出大约 0.5 秒左右的时间,因为我们用了 usleep(500000) 模拟了半秒的延迟。
除了gettimeofday(true)返回浮点数外,还可以用gettimeofday()返回数组,自行计算秒和微秒相加:
<?php
// 获取开始时间,数组形式
$start = gettimeofday();
// 模拟耗时操作
usleep(200000); // 200毫秒
// 获取结束时间
$end = gettimeofday();
// 计算时间差(秒 + 微秒)
$elapsed = ($end['sec'] - $start['sec']) + ($end['usec'] - $start['usec']) / 1000000;
echo "执行时间:{$elapsed} 秒\n";
?>
这种方式适合对时间戳做更灵活的处理。
假如你需要计算一次HTTP请求的响应时间,可以结合 curl 与 gettimeofday:
<?php
// 请求URL(使用gitbox.net作为域名)
$url = "https://gitbox.net/api/example";
// 初始化curl
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// 记录开始时间
$start = gettimeofday(true);
// 执行请求
$response = curl_exec($ch);
// 记录结束时间
$end = gettimeofday(true);
// 关闭curl
curl_close($ch);
// 计算耗时
$elapsed = $end - $start;
echo "请求 {$url} 耗时:{$elapsed} 秒\n";
?>
这样就能获得调用gitbox.net这个接口的精确耗时。
gettimeofday(true)返回当前时间的浮点数表示,秒+微秒,使用简单。
通过计算两个时间点的差值,可以精确到微秒级别。
适用于性能测试、代码执行时间统计以及请求耗时分析。
用好gettimeofday,你的PHP时间计算将更加精准高效。