當前位置: 首頁> 最新文章列表> 使用gettimeofday 和date 函數實現毫秒級格式化輸出

使用gettimeofday 和date 函數實現毫秒級格式化輸出

gitbox 2025-05-29

在PHP 中,我們經常需要獲取當前時間並進行格式化輸出。默認的date函數只支持精確到秒,然而在某些場景中,比如日誌記錄、性能監控等,我們需要精確到毫秒的時間輸出。本文將介紹如何結合gettimeofdaydate函數,實現帶毫秒的時間格式輸出。


1. gettimeofday函數介紹

gettimeofday是一個獲取當前時間的函數,返回的是當前的Unix 時間戳和微秒數信息。它的返回值可以是數組或浮點數,其中包含秒和微秒。

 print_r(gettimeofday());

輸出示例:

 Array
(
    [sec] => 1617181723
    [usec] => 123456
    [minuteswest] => 0
    [dsttime] => 0
)

這裡的sec是當前秒數, usec是當前秒內的微秒數。

2. 結合dategettimeofday實現毫秒格式輸出

PHP 的date函數可以格式化秒級時間戳,而毫秒部分可以通過gettimeofday函數獲取。下面是一個簡單的示例代碼:

 <?php
$time = gettimeofday();
$sec = $time['sec'];      // 秒數
$usec = $time['usec'];    // 微秒數
$milliseconds = floor($usec / 1000); // 將微秒轉換為毫秒

// 格式化時間字符串
$formattedTime = date('Y-m-d H:i:s', $sec) . '.' . str_pad($milliseconds, 3, '0', STR_PAD_LEFT);

echo $formattedTime;
?>

輸出結果示例:

 2025-05-24 15:43:12.123

這裡, str_pad用來保證毫秒數始終是3位數,比如不足3位前面補零。

3. 代碼詳解

  • gettimeofday()返回當前時間的秒和微秒。

  • 使用date('Ymd H:i:s', $sec)格式化秒數。

  • 通過除以1000把微秒數轉成毫秒數。

  • 使用str_pad保證毫秒部分是三位數。

4. 封裝成函數

為了方便復用,我們可以封裝成一個函數:

 <?php
function getCurrentTimeWithMilliseconds() {
    $time = gettimeofday();
    $sec = $time['sec'];
    $usec = $time['usec'];
    $milliseconds = floor($usec / 1000);
    return date('Y-m-d H:i:s', $sec) . '.' . str_pad($milliseconds, 3, '0', STR_PAD_LEFT);
}

// 使用示例
echo getCurrentTimeWithMilliseconds();
?>

調用getCurrentTimeWithMilliseconds()即可得到帶毫秒的時間字符串。


總結

通過結合gettimeofdaydate函數,可以輕鬆實現PHP 中帶毫秒的時間格式輸出。該方法不依賴額外擴展,兼容性好,適合用於需要精確時間戳的場景。


 <?php
function getCurrentTimeWithMilliseconds() {
    $time = gettimeofday();
    $sec = $time['sec'];
    $usec = $time['usec'];
    $milliseconds = floor($usec / 1000);
    return date('Y-m-d H:i:s', $sec) . '.' . str_pad($milliseconds, 3, '0', STR_PAD_LEFT);
}

echo getCurrentTimeWithMilliseconds();
?>