PHPで日付や時間が現在と比較して、未来なのか過去なのかを判定して処理を行うといったことがあると思います。
そのような場合にはstrtotime関数を利用すると、簡単に日付や時間で比較を行うことができます。
例えば、指定した日付が未来なのか、過去なのかを判定するなら以下のようになります。
// 今日の日付を取得 $dt = new DateTime(); $dt->setTimeZone(new DateTimeZone('Asia/Tokyo')); $today = $dt->format('Y-m-d'); // 比較する日付を設定 $target_day = '2013-05-21'; // 日付を比較 if (strtotime($target_day) > strtotime($today)) { echo '指定した日付は未来です。'; } elseif(strtotime($target_day) < strtotime($today)) { echo '指定した日付は過去です。'; } else { echo '指定した日付は今日です。'; }
時間で比較する場合はDateTimeクラスのフォーマットを時刻も取得するように指定してやれば同様に比較できます。
// 今日の日付を取得 $dt = new DateTime(); $dt->setTimeZone(new DateTimeZone('Asia/Tokyo')); $current_time = $dt->format('Y-m-d H:i:s'); // 比較する日付と時間を設定 $target_time = '2013-05-21 12:20:12'; // 日付を比較 if (strtotime($target_time) > strtotime($current_time)) { echo '指定した日付は未来です。'; } elseif(strtotime($target_time) < strtotime($current_time)) { echo '指定した日付は過去です。'; } else { echo '指定した日付は今です。'; }
DateTimeクラスとstrtotime関数を組み合わせて利用すると、日付や時刻のような面倒のように思える比較が非常に簡単に書くことができるようになります。
現在時刻や、本日を取得する場合、毎回インスタンスを生成するところから記述するのは面倒なので、関数化してしまうと良いでしょう。
/** * ---------------------------------------------------------- * getCurrentDate() * 現在の年月日を取得する * ---------------------------------------------------------- */ function getCurrentDate() { $dt = new DateTime(); $dt->setTimeZone(new DateTimeZone('Asia/Tokyo')); return $dt->format('Y-m-d'); } /** * ---------------------------------------------------------- * getCurrentTime() * 現在時間を取得する * ---------------------------------------------------------- */ function getCurrentTime() { $dt = new DateTime(); $dt->setTimeZone(new DateTimeZone('Asia/Tokyo')); return $dt->format('Y-m-d H:i:s'); }
本日は以上です。
- 投稿タグ
- PHP
ありがとうございます。何回も何回もこのような判定を行うのですが、毎回忘れてしまい、Webで探し回りますが、このページが一番簡潔で分かりやすいと思います。
ありがとうございます。分かりやすいプログラムの説明をこれからも心がけて行きたいと思います。
Pingback: CakePHP 時間差 日付差 | 今きになった事