[PHP] ログ出力等する際に、日付文字列をミリ秒まで表示する方法
こんにちは、@yoheiMuneです。
本日はPHPネタで、ログファイルなどに出力する場合に時間をミリ秒まで出したい!、そんな時に役立つ実装方法をブログに書きたいと思います。
PHP: microtime - Manual
PHP: 日付の書式 - Manual
最後になりますが本ブログでは、フロントエンド・Python・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!
本日はPHPネタで、ログファイルなどに出力する場合に時間をミリ秒まで出したい!、そんな時に役立つ実装方法をブログに書きたいと思います。
何が問題なのか
PHPではdate
関数を使うことで、現在時刻を取得することができ、文字列としても出力することができます。date_default_timezone_set('Asia/Tokyo'); echo date("Y-m-d H:i:s"); # => 2016-04-12 09:45:31多くの場合はこれで十分なのですが、ミリ秒まで必要な場合に、この方法では出力することができません。
# 日付フォーマットとしてマイクロ秒を表す「u」があるが、必ずゼロ echo date("Y-m-d H:i:s.u"); # => 2016-04-12 09:45:31.000000 # Datetimeでもダメです $today = new DateTime(); echo $today->format('Y-m-d H:i:s.u'); # => 2016-04-12 09:45:31.000000ということで別の方法として、
microtime
関数を使います。microtimeを使ってミリ秒まで取得する
microtime
関数を使うことで、マイクロ秒まで含まれたタイムスタンプを取得することができます。# microtimeからタイムスタンプを取得 # リファレンス:http://php.net/manual/ja/function.microtime.php # 引数にtrueを指定すると、マイクロ秒までfloatで取得できる $now = microtime(true); echo $now; # => 1460432204.0544 # 小数点以下から、上3桁をミリ秒として取得する $ms = (int)(($now - (int)$now) * 1000); $msStr = str_pad($ms, 3, 0, STR_PAD_LEFT); echo $msStr; # => 054 # または、「.」を基準に分割してもOK $msStr = substr(explode(".", (microtime(true) . ""))[1], 0, 3); echo $msStr; # => 054こんな感じでミリ秒を取得することができます。あとは、
date
関数と組み合わせて目的の日付文字列を作ります。# ミリ秒まで表示する日付文字列 $dtStr = date("Y-m-d H:i:s") . "." . substr(explode(".", (microtime(true) . ""))[1], 0, 3); echo $dtStr; # => 2016-04-12 12:40:46.049
参考資料
今回の実装を行うために以下の記事を参照しました。ありがとうございます。PHP: microtime - Manual
PHP: 日付の書式 - Manual
最後に
今回は、PHPでミリ秒まで表示するための実装方法をブログに書きました。多くのログではミリ秒まで無くていいんですが、パフォーマンス計測用とかだとほしかったりもするんですよね。あとはアクセスが多い場合とかも。少しでも役立てば幸いです。最後になりますが本ブログでは、フロントエンド・Python・機械学習など雑多に情報発信をしていきます。自分の第2の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSやTwitterをフォローして頂けると幸いです ^ ^。
最後までご覧頂きましてありがとうございました!