Table of Contents
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つを同時に行った結果は以下のようになります。
末尾が 0 だった場合は省略されるようです。
以上、ミリ秒やマイクロ秒単位を含む時間を取得する方法についてでした。