[PHP] ミリ秒やマイクロ秒を含む現在時間を取得するクラスと関数

By | 2018年7月16日

PHPで、1秒より細かい時間単位(ミリ秒、マイクロ秒)を含む現在時間を取得する方法についてです。

秒単位以上の時間のみ取得できれば十分という場合は、関数 date だけで以下のように取得できます。

date('Y-m-d H:i:s'); // 2018-07-13 14:43:14

しかし date は整数単位(Int)でしか値を返さないため、ミリ秒やマイクロ秒といった細かい時間は得られません。

以下のようにミリ秒以下を返すフォーマット(u)を指定しても、返ってくる値は 000000 となります。

echo date('Y-m-d H:i:s.u'); // 2018-07-13 14:43:14.000000

DateTimeクラスを利用する方法

クラス DateTime のメソッド format では、マイクロ秒まで返すフォーマット(u)を利用できますので、以下のように書くだけでマイクロ秒単位まで取得できます。

$date = new DateTime();
echo $date->format('Y-m-d H:i:s.u'); // 2018-07-13 14:51:18.269878

DateTime のインスタンスを他に利用しないのであれば、以下のように一行で書くこともできます。

echo (new DateTime())->format('Y-m-d H:i:s.u'); // 2018-07-13 14:51:18.269878

PHP7以降であれば、この方法で現在時間を取得するのが最も簡単だと思われます。

microtime関数を利用する方法

ミリ秒単位まで取得する場合は、関数 microtime で得られるUnixタイムスタンプを使い、以下の方法で取得できます。

// ミリ秒を含むUnixタイムスタンプを数値(Float)で取得
$timestamp = microtime(true);

// ミリ秒とそうでない部分を分割
$timeInfo = explode('.', $timestamp);

// ミリ秒でない時間の部分を指定のフォーマットに変換し、その末尾にミリ秒を追加
$timeWithMillisec = date('Y-m-d H:i:s', $timeInfo[0]) . '.' .$timeInfo[1];

// 表示
echo $timeWithMillisec; // 2018-07-13 14:51:18.2698

上記3つを同時に行った結果は以下のようになります。

PHPで現在時刻を取得する様々な方法

末尾が 0 だった場合は省略されるようです。

以上、ミリ秒やマイクロ秒単位を含む時間を取得する方法についてでした。

参考

PHP: date - Manual

PHP: DateTime - Manual

PHP: microtime - Manual

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*