在PHP 中,我們經常需要獲取當前時間並進行格式化輸出。默認的date函數只支持精確到秒,然而在某些場景中,比如日誌記錄、性能監控等,我們需要精確到毫秒的時間輸出。本文將介紹如何結合gettimeofday和date函數,實現帶毫秒的時間格式輸出。
gettimeofday是一個獲取當前時間的函數,返回的是當前的Unix 時間戳和微秒數信息。它的返回值可以是數組或浮點數,其中包含秒和微秒。
print_r(gettimeofday());
輸出示例:
Array
(
[sec] => 1617181723
[usec] => 123456
[minuteswest] => 0
[dsttime] => 0
)
這裡的sec是當前秒數, usec是當前秒內的微秒數。
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位前面補零。
gettimeofday()返回當前時間的秒和微秒。
使用date('Ymd H:i:s', $sec)格式化秒數。
通過除以1000把微秒數轉成毫秒數。
使用str_pad保證毫秒部分是三位數。
為了方便復用,我們可以封裝成一個函數:
<?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()即可得到帶毫秒的時間字符串。
通過結合gettimeofday和date函數,可以輕鬆實現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();
?>