当記事では、PHPで様々な日付の処理を行う方法について紹介します。
PHPではdate関数とstrtotime関数を使用して様々な日時の処理が行えます。
このdata関数とstrtotime関数は覚えておきましょう。
PHPで日付を取得するときは、date を使用します。
date([フォーマット])で任意のフォーマットで表示できます。
以下では現在の年月日 時分秒を表示しています。
echo date('Y-m-d H:i:s');
次に、指定した日時の年月日 時分秒を表示します。
date([フォーマット], strtotime([日時])) と指定することで任意のフォーマットで指定した日時を表示できます。
echo date('Y-m-d H:i:s', strtotime('2013-07-22 10:05:30'));
指定したが有効なのか無効なのか、日付の存在チェックを行います。
PHPではcheckdate関数を使用して簡単にチェックすることができます。
if(checkdate(4, 31, 2013) === false) {
echo "無効な日付";
} else {
echo "有効な日付";
}
日時の加算および減算を行います。
strtotime関数で、+○ dayとすることで○日加算されます。
また、day意外にも以下のものが用意されています。
年 : year
月 : month
日 : day
週 : week
時 : hour
分 : minute
秒 : second
現在日時から7日後・7日前の日付を表示するには以下のように指定します。
echo date('Y-m-d H:i:s', strtotime("+ 7 day"));
echo date('Y-m-d H:i:s', strtotime("- 7 day"));
次は指定した日付から、日付の加算・減算を行います。
以下では、2013/7/22の7日後・7日前の日時を表示しています。
echo date('Y-m-d H:i:s', strtotime("2013-07-22 +7 day"));
echo date('Y-m-d H:i:s', strtotime("2013-07-22 -7 day"));
次は月単位で加算・減算を行います。
以下では、2013/7/22の2か月後・2か月前の日時を表示しています。
echo date('Y-m-d H:i:s', strtotime("2013-07-22 +2 month"));
echo date('Y-m-d H:i:s', strtotime("2013-07-22 -2 month"));
ある年月の末日を取得したいときってよくありますよね。
末日とは、その月の最後の日のことです。
PHPでは、フォーマットで[t]を指定することで末日を取得できます。
以下では、2013年7月の末日を表示しています。
echo date('t', strtotime('2013-07-22'));
PHPでは日次の比較も簡単に行えます。
strtotime関数でtime型に変更してやり、後は数値データと同じように比較するだけです。
実際には以下のようになります。
if (strtotime('2013-07-22') > strtotime('2013-04-22')) {
}else{
}
PHPでは、日付の差も簡単にもとめることができます。
strtotime関数でtime型に変更してやり、減算するだけです。
減算した値は、単位が秒となっているので、分なら×60、時なら×3600としてやります。
以下では、差を日単位で表示しています。
echo (strtotime('2013-07-22') - strtotime('2013-05-22')) / ( 60 * 60 * 24);
指定できるフォーマットは以下となります。
※これら以外の文字列を指定した場合は、そのまま表示されます
format文字 | 説明 | 戻り値の例 |
---|---|---|
d | 日。二桁の数字(先頭にゼロがつく場合も) | 01 から 31 |
D | 曜日。3文字のテキスト形式。 | Mon から Sun |
j | 日。先頭にゼロをつけない。 | 1 から 31 |
l (小文字の 'L') | 曜日。フルスペル形式。 | Sunday から Saturday |
N | ISO-8601 形式の、曜日の数値表現 (PHP 5.1.0 で追加)。 | 1(月曜日)から 7(日曜日) |
S | 英語形式の序数を表すサフィックス。2 文字。 | st, nd, rd または th。 jと一緒に使用する ことができる。 |
w | 曜日。数値。 | 0 (日曜)から 6 (土曜) |
z | 年間の通算日。数字。(ゼロから開始) | 0 から 365 |
W | ISO-8601 月曜日に始まる年単位の週番号 (PHP 4.1.0 で追加) | 例: 42 (年の第 42 週目) |
F | 月。フルスペルの文字。 | January から December |
m | 月。数字。先頭にゼロをつける。 | 01 から 12 |
M | 月。3 文字形式。 | Jan から Dec |
n | 月。数字。先頭にゼロをつけない。 | 1 から 12 |
t | 指定した月の日数。 | 28 から 31 |
L | 閏年であるかどうか。 | 1なら閏年。0なら閏年ではない。 |
o | ISO-8601 形式の年。これは Y ほぼ同じだが、ISO 週番号 (W)が前年あるいは翌年に属する場合がある点で 異なる(PHP 5.1.0 で追加)。 | 例: 1999 あるいは 2003 |
Y | 年。4 桁の数字。 | 例: 1999または2003 |
y | 年。2 桁の数字。 | 例: 99 または 03 |
a | 午前または午後(小文字) | am または pm |
A | 午前または午後(大文字) | AM または PM |
B | Swatch インターネット時間 | 000 から 999 |
g | 時。12時間単位。先頭にゼロを付けない。 | 1 から 12 |
G | 時。24時間単位。先頭にゼロを付けない。 | 0 から 23 |
h | 時。数字。12 時間単位。 | 01 から 12 |
H | 時。数字。24 時間単位。 | 00 から 23 |
i | 分。先頭にゼロをつける。 | 00 から 59 |
s | 秒。先頭にゼロをつける。 | 00 から 59 |
u | マイクロ秒 (PHP 5.2.2 で追加)。 date() の場合、これは常に 000000 となることに注意しましょう。というのも、 この関数が受け取るパラメータは integer 型だからです。 一方 DateTime::format() はマイクロ秒にも対応しています。 | 例: 654321 |
e | タイムゾーン識別子(PHP 5.1.0 で追加) | 例: UTC, GMT, Atlantic/Azores |
I (大文字の i) | サマータイム中か否か | 1ならサマータイム中。 0ならそうではない。 |
O | グリニッジ標準時 (GMT) との時差 | 例: +0200 |
P | グリニッジ標準時 (GMT) との時差。時間と分をコロンで区切った形式 (PHP 5.1.3 で追加)。 | 例: +02:00 |
T | タイムゾーンの略称 | 例: EST, MDT ... |
Z | タイムゾーンのオフセット秒数。 UTC の西側のタイムゾーン用のオフセットは常に負です。そして、 UTC の東側のオフセットは常に正です。 | -43200 から 50400 |
c | ISO 8601 日付 (PHP 5 で追加されました) | 2004-02-12T15:19:21+00:00 |
r | » RFC 2822 フォーマットされた日付 | 例: Thu, 21 Dec 2000 16:01:07 +0200 |
U | Unix Epoch (1970 年 1 月 1 日 0 時 0 分 0 秒) からの秒数 | time() も参照 |
※PHP Manual参照