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時間計算將更加精準高效。