当前位置: 首页> 最新文章列表> 使用 gettimeofday 来计算两个时间点之间的时间差

使用 gettimeofday 来计算两个时间点之间的时间差

gitbox 2025-05-27

什么是 gettimeofday 函数?

gettimeofday 函数返回当前时间的微秒级别的时间信息,包含秒(seconds)和微秒(microseconds)两个部分。它返回的是一个关联数组,结构如下:

array(
  "sec" => 秒数,
  "usec" => 微秒数,
  "minuteswest" => 当前时区与UTC时间的分钟差,
  "dsttime" => 夏令时标志
)

在计算时间差时,我们主要关注secusec两个值。


如何用 gettimeofday 来计算时间差?

思路是:

  1. 在两个时间点调用gettimeofday(true)获取时间戳(此时返回浮点数,秒 + 微秒的精度)。

  2. 用结束时间减去开始时间,得到精确的秒数差值,支持小数点后微秒级别。


具体示例代码

<?php
// 获取开始时间
$start = gettimeofday(true);

// 模拟耗时操作
usleep(500000); // 500毫秒

// 获取结束时间
$end = gettimeofday(true);

// 计算时间差,单位为秒,支持微秒
$elapsed = $end - $start;

echo "执行时间:{$elapsed} 秒\n";
?>

这段代码会输出大约 0.5 秒左右的时间,因为我们用了 usleep(500000) 模拟了半秒的延迟。


使用 gettimeofday 返回数组,手动计算微秒

除了gettimeofday(true)返回浮点数外,还可以用gettimeofday()返回数组,自行计算秒和微秒相加:

<?php
// 获取开始时间,数组形式
$start = gettimeofday();

// 模拟耗时操作
usleep(200000); // 200毫秒

// 获取结束时间
$end = gettimeofday();

// 计算时间差(秒 + 微秒)
$elapsed = ($end['sec'] - $start['sec']) + ($end['usec'] - $start['usec']) / 1000000;

echo "执行时间:{$elapsed} 秒\n";
?>

这种方式适合对时间戳做更灵活的处理。


结合URL请求示例

假如你需要计算一次HTTP请求的响应时间,可以结合 curlgettimeofday

<?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时间计算将更加精准高效。