Web/DB プログラミング徹底解説

ホーム > PHP プログラミング > 図で見てわかる PHP の日付・時間関数の関係

図で見てわかる PHP の日付・時間関数の関係

伝統的な PHP の日付・時間関数を整理する

この資料では PHP の日付、時間に関する関数を整理します。

ただし、DateTime、DateTimeZone、DateInterval などの比較的新しいクラス群も扱っていませんし、 完全な資料を目指しているわけでもありませんので・・・(汗)、
詳細については PHP のマニュアルをご覧ください。

と、前置きをした上で・・・

伝統的な PHP の日付・時間関数を整理すると、次のようにまとめられます。
(というか、この資料のポイントはこれだけです)

PHP の日付と時間に関する関数を整理する

橙色で示している箇所はデータ表現です。
これには三種類あります。

  • タイム・パーツ -- 年、月、日、時間の各部分からなる配列
  • エポック・タイムスタンプ -- 1970年1月1日を基点とした経過秒
  • フォーマット済み文字列 -- 日付を表す文字列

これらの時間、日付の表現形式をどのように PHP の関数で相互変換するのかを示したのが上の図です。

例えば、'1/31/2011' という 2011年1月31日を表すフォーマット済み文字列から、 エポックタイムスタンプを取得するには、strtotime 関数を使います。

逆に、エポック・タイムスタンプを既に持っており、 それをフォーマットされた文字列にするには date 関数または strftime 関数を使います。

gm の接頭辞がついた関数は、世界標準時として時刻を表します。 逆にそれがついていないならば、サーバーのローカル時間で時刻を表します。

日付、時間に関する PHP 関数の呼び出し例

詳細を網羅することはマニュアルに譲ることにして、ここではいくつか良く使うデータ表現をとりあげ、 実際の PHP 関数呼び出しをみてみましょう。

現在時刻を YYYY/MM/DD の形式で表す

PHP の日付と時間に関する関数を整理する 現在時刻について、フォーマット済みの文字列を取得するわけですから、上図の右上に書いてあるとおり、 date 関数または strftime 関数を利用します。

関数呼び出し実行例
date('Y/m/d')2017/10/23
strftime('%Y/%m/%d')2017/10/23


現在時刻のタイム・パーツ配列を取得する

PHP の日付と時間に関する関数を整理する 現在時刻についてタイム・パーツ(配列)を取得するわけですから、上図の上部に書いてあるとおり、 getdate 関数または localtime 関数を利用します。

関数呼び出し$a の内容
$a = getdate();
Array
(
    [seconds] => 25
    [minutes] => 50
    [hours] => 21
    [mday] => 23
    [wday] => 1
    [mon] => 10
    [year] => 2017
    [yday] => 295
    [weekday] => Monday
    [month] => October
    [0] => 1508817025
)


現在時刻のエポックタイムスタンプをを取得する

PHP の日付と時間に関する関数を整理する 現在時刻についてタイム・パーツ(配列)を取得するわけですから、上図の右上から左下へ向かう流れで、 mktime 関数を利用します。

関数呼び出し$a の内容
$a = mktime();1508817025


エポックタイムスタンプからフォーマット済みの文字列を取得する

PHP の日付と時間に関する関数を整理する エポックタイムスタンプからフォーマット済みの文字列を取得するので、下段の左から右の流れで、 date 関数または strftime 関数を利用します。

関数呼び出し$a の内容
strftime('%c', 1264154396);Fri Jan 22 02:59:56 2010
date('r', 1264154396);Fri, 22 Jan 2010 02:59:56 -0700


文字列からエポックタイムスタンプを取得する

PHP の日付と時間に関する関数を整理する 文字列からエポックタイムスタンプを取得するので、下段の右から左の流れで、 strtotime 関数を利用します。

関数呼び出し$a の内容
strtotime('tomorrow');1508824800
これをさらに strftime を使ってフォーマットしなおすと次のようになり、確かに tomorrow という文字が解釈されていることがわかる...
Tue Oct 24 00:00:00 2017


以上、ここでは日付と時間に関する関数の使い方を整理しました。