yamata.programmer.blog

28歳 プログラマになるために通った道に落ちていた情報を発信します!

【PHP・Laravel】日付を比較する方法【超簡単】

今回の記事を読んで欲しい方

  • 今日の日付と過去か未来の日付を比較したい方

今回はPHPでできる日付が過去か未来か比較する方法についてについて書いていこうと思います。

結論:strtotime関数、datetimeクラスがある

単純に日付が過去か未来かを比較する方法として、上記の2つがあります。

比較はできませんが、date関数も日付表示のみであればできます。

date関数

date関数ですが、以下の要領で書きます。

戻り値がString型のため、このままの状態だと比較できません。

date_default_timezone_set('Asia/Tokyo');
$date = date('Y-m-d H:i:s');
$date = date('Y/m/d');

以上の記述です。

1行目は、タイムゾーンを東京にする記述です。

2,3行目が本題の時刻の記述方法です。

2行目の書き方だと、現在時刻で2021-02-11 16:19:30 と表示されます。

3行目は、2021/02/11 で表示されます。

アルファベットの表記の意味は以下です。

  • Y:年(4桁表記)
  • y:年(2桁表記)
  • m:月(2桁表記)
  • n:月(1から9月までの先頭に0をつけない表記)
  • d:日(2桁表記)
  • H:時間(24時間表記)
  • h:時間(12時間表記)
  • i:分
  • s:秒

strtotime関数

date関数をそのまま使っても戻り値がString型のため比較できませんが、strtotime関数でdate型に変換することによって日付を比較する事ができます。

$dateStr = '2021-02-11';
$date = strtotime($dateStr);

$date = strtotime(date('Y-m-d H:i:s'));

変換は1,2行目のこのような形でできます。

4行目の書き方で、現在時刻をdate型で取得することも可能です。

$dateNow = strtotime(date('Y-m-d'));
$date = strtotime('2021-01-01');

if($dateNow < $date)){
// Trueの処理
} else {
// Falseの処理
}

この場合、今日の日付が2021-02-11となるので、Falseの処理となります。

strtotimeで気をつけなければいけない事は、2038年問題です。

詳細は割愛しますが、2038年1月19日3時14分7秒を過ぎるとコンピュータが誤作動を起こす可能性があるとされている問題です。

Datetimeクラス

もう1つ、日付を比較する方法でDatetimeクラスを利用する方法があります。

$dateTime = new Datetime();
$dateTime->format('Y-m-d');
$date = strtotime('2021-01-01');

if($date < $dateTime)){
// Trueの処理
} else {
// Falseの処理
}

1,2行目が書き方です。現在の時刻を取得する事ができます。

strtotime関数を利用せずに、比較する事が可能です。

この書き方のif文の分岐の場合は、Trueの処理の方となります。

 

今回のまとめ

strtotime関数の書き方とDatetimeクラスの書き方の記述を今回はご紹介致しました。

2038年問題の件もあるので、Datetimeクラスを使う方をお勧めしますが、比較・検討していただいて好きな方をお使いください。