🥔

PHPのmicrotime()で取得する「UNIXタイムスタンプ」について調べてみた

2023/02/06に公開

概要

仕事中にPHPの組み込み関数microtime()を使用している部分でエラーが発生していました。
PHPのドキュメントを読んでみると「Unix タイムスタンプ」という単語が出現し、よくわかっていなかったため調べました。

https://www.php.net/manual/ja/function.microtime.php

UNIXタイムスタンプとは

1970年1月1日午前0時0分0秒(UTC)からの経過秒数で表現される

例:1970年1月1日午前0時0分1秒(UTC)だったら「1」になる
例:2020年6月27日午前8時9分10秒(UTC)だったら「1593245350」になる

https://wa3.i-3-i.info/word18475.html

UNIXタイムスタンプとは、別名「UNIX時間」「UNIX time」「POSIX time」などと呼ばれる、時刻表現の一種です。1970年1月1日午前0時0分0秒からの経過秒数をうるう秒の存在を無視した秒数で表現しています。 古いシステムでは、秒数なので「整数」で表現されることが一般的でした。(例:2023年02月06日 08時44分45秒 → 1675673085) しかし、現在ではマイクロ秒単位で「整数」として表現したもの(例:2023年02月06日 08時44分45秒 → 1675673085349708)や、 マイクロ秒を小数点以下として「浮動小数点」で表現したもの(例:2023年02月06日 08時44分45秒 → 1675673085.349708)、 そのほかマイクロ秒よりも細かい時間で取得できるものもあります。

https://test.ohanasiya.net/timestamp/

つまり、

  • 昔は秒数だから整数で表していたが、今はさらに細かくマイクロ秒までを表現することができる
  • PHPではマイクロ秒までのUNIXタイムスタンプを取得するのにmicrotime()を使用する
    ということらしい

マイクロ秒

マイクロ秒とは、時間の単位の一つで、1秒の100万分の1(10-6秒)を表すもの。ミリ秒の1/1000で、100万マイクロ秒が1秒に相当する。

https://e-words.jp/w/マイクロ秒.html

microtime()とは

echo microtime();
実行結果
0.30573700 1675679164

右がUNIXタイムスタンプの〇〇秒まで、左が秒より下のマイクロ秒を表しています。

microtime(bool)の引数

デフォルトではfalseになっており、文字列を返します。
逆にtrueを指定するとfloatが返ってきます。

ランダムなファイル名をつける手段などでmicrotime(true)を使用する場合、

0.000000 -> 0
0.000049 -> 0

のように小数点以下が切り捨てられることがあるので注意が必要です。
その場合は引数をfalseとして文字列が返ってくるようにするなど気を付けましょう。

Discussion