2016/04/13更新

[PHP] ログ出力等する際に、日付文字列をミリ秒まで表示する方法

このエントリーをはてなブックマークに追加      

こんにちは、@yoheiMuneです。
本日は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の脳にすべく、情報をブログに貯めています。気になった方は、本ブログのRSSTwitterをフォローして頂けると幸いです ^ ^。

最後までご覧頂きましてありがとうございました!





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。