図で見てわかる PHP の日付・時間関数の関係
伝統的な PHP の日付・時間関数を整理する
この資料では PHP の日付、時間に関する関数を整理します。
ただし、DateTime、DateTimeZone、DateInterval などの比較的新しいクラス群も扱っていませんし、
完全な資料を目指しているわけでもありませんので・・・(汗)、
詳細については PHP のマニュアルをご覧ください。
と、前置きをした上で・・・
伝統的な PHP の日付・時間関数を整理すると、次のようにまとめられます。
(というか、この資料のポイントはこれだけです)
橙色で示している箇所はデータ表現です。
これには三種類あります。
- タイム・パーツ -- 年、月、日、時間の各部分からなる配列
- エポック・タイムスタンプ -- 1970年1月1日を基点とした経過秒
- フォーマット済み文字列 -- 日付を表す文字列
これらの時間、日付の表現形式をどのように PHP の関数で相互変換するのかを示したのが上の図です。
例えば、'1/31/2011' という 2011年1月31日を表すフォーマット済み文字列から、 エポックタイムスタンプを取得するには、strtotime 関数を使います。
逆に、エポック・タイムスタンプを既に持っており、 それをフォーマットされた文字列にするには date 関数または strftime 関数を使います。
gm の接頭辞がついた関数は、世界標準時として時刻を表します。 逆にそれがついていないならば、サーバーのローカル時間で時刻を表します。
日付、時間に関する PHP 関数の呼び出し例
詳細を網羅することはマニュアルに譲ることにして、ここではいくつか良く使うデータ表現をとりあげ、 実際の PHP 関数呼び出しをみてみましょう。
現在時刻を YYYY/MM/DD の形式で表す
現在時刻について、フォーマット済みの文字列を取得するわけですから、上図の右上に書いてあるとおり、 date 関数または strftime 関数を利用します。
関数呼び出し | 実行例 |
---|---|
date('Y/m/d') | 2024/11/21 |
strftime('%Y/%m/%d') | 2024/11/21 |
現在時刻のタイム・パーツ配列を取得する
現在時刻についてタイム・パーツ(配列)を取得するわけですから、上図の上部に書いてあるとおり、 getdate 関数または localtime 関数を利用します。
関数呼び出し | $a の内容 |
---|---|
$a = getdate(); | Array ( [seconds] => 40 [minutes] => 50 [hours] => 1 [mday] => 21 [wday] => 4 [mon] => 11 [year] => 2024 [yday] => 325 [weekday] => Thursday [month] => November [0] => 1732179040 ) |
現在時刻のエポックタイムスタンプをを取得する
現在時刻についてタイム・パーツ(配列)を取得するわけですから、上図の右上から左下へ向かう流れで、 mktime 関数を利用します。
関数呼び出し | $a の内容 |
---|---|
$a = mktime(); | 1732179040 |
エポックタイムスタンプからフォーマット済みの文字列を取得する
エポックタイムスタンプからフォーマット済みの文字列を取得するので、下段の左から右の流れで、 date 関数または strftime 関数を利用します。
関数呼び出し | $a の内容 |
---|---|
strftime('%c', 1264154396); | Fri Jan 22 02:59:56 2010 |
date('r', 1264154396); | Fri, 22 Jan 2010 02:59:56 -0700 |
文字列からエポックタイムスタンプを取得する
文字列からエポックタイムスタンプを取得するので、下段の右から左の流れで、 strtotime 関数を利用します。
関数呼び出し | $a の内容 |
---|---|
strtotime('tomorrow'); | 1732258800 これをさらに strftime を使ってフォーマットしなおすと次のようになり、確かに tomorrow という文字が解釈されていることがわかる... Fri Nov 22 00:00:00 2024 |
以上、ここでは日付と時間に関する関数の使い方を整理しました。