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で動画の撮影日を取得

PHPで動画の撮影日を取得 概要 PHPからffprobeコマンドを実行し、動画の撮影日時を取得します。 コード $posted_at = ...

FullCalendarでGoogleカレンダーのようなUIを実装

jQueryプラグインFullCalendarのサンプル 概要 FullCalendarを使用して、GoogleカレンダーのようなUIを実装する使用例を...

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 ...
トップへ戻る