PHPでは、現在の時間を取得し、出力をフォーマットする必要があることがよくあります。デフォルトの日付関数は、正確な秒のみをサポートします。ただし、ロギング、パフォーマンス監視などの一部のシナリオでは、ミリ秒までの出力時間を正確にする必要があります。この記事では、 GetTimeOfdayと日付関数を組み合わせて、Millisecondsで時間形式の出力を実現する方法を紹介します。
GetTimeOfdayは、現在のUNIXタイムスタンプとマイクロ秒の情報を返すような現在の時間を取得する関数です。その返品値は、秒とマイクロ秒を含む配列またはフローティングポイント番号にすることができます。
print_r(gettimeofday());
出力例:
Array
(
[sec] => 1617181723
[usec] => 123456
[minuteswest] => 0
[dsttime] => 0
)
ここでは、 SECは現在の秒数であり、 USECは現在の秒数内のマイクロ秒です。
PHPの日付関数は、秒のタイムスタンプをフォーマットできますが、Millisecond部分は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()は、現在の時間の秒とマイクロ秒を返します。
日付を使用して秒数をフォーマットします( 'ymd h:i:s'、$ sec) 。
マイクロ秒を1000で割ってミリ秒に変換します。
STR_PADを使用して、ミリ秒部品が3桁であることを確認します。
多重化の便利さのために、それを関数にカプセル化することができます:
<?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と日付関数を組み合わせることにより、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();
?>