當前位置: 首頁> 最新文章列表> 如何使用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時間計算將更加精準高效。