PHP 日付計算処理のまとめ

2013/07/22

PHPで日付の加算・減算・比較の方法について

概要

当記事では、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参照

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

PHP Laravel5.2でmulti-auth(複数テーブルでの認証)を実装

Laravel5.2でマルチ認証 概要 LaravelとはPHPの中で今最も伸びているフレームワークです。 処理速度が遅いなどありますが、かなり使い安く拡...

PHP 正規表現でIPアドレス形式の文字列か判定

正規表現でIPアドレスの入力チェック 概要 フォームで入力されたIPアドレスが正当な文字列か判定するためのバリデーション処理を実装します。 基本的...

rbenv環境でRuby on Railsのアプリケーションを一瞬で自動生成

アプリケーション構築時に最初に行う手順 概要 アプリケーションを作成するまでの手順を記載しています。 rbenvなどの環境が設定済と仮定して話を進めま...

Rails devise・authority・rolifyで権限付きの認証機能

devise・authority・rolify 概要 3つのGemを使用して、権限付き認証機能を実装します。 gem インストール Gemfile ...

Rails devise で複数モデルの認証機能を実装

Rails devise で複数モデルを管理 概要 rails のログイン認証 Gem「devise」のインストール・設定方法を紹介します。 よく「d...

jQuery UI ドラッグ&ドロップで並び替え sortableの使用方法

sortable 概要 jQuery UIを使用して、ドラッグ&ドロップで並び替えを行います。 sortableを使用することで、一瞬で実装できちゃいます...
トップへ戻る