【php】日付の比較について
はじめに
本記事ではphpでの日付の比較について説明していきます。日付の比較は、使用することも多く、とても便利ですので実際にコードを書きながらマスターしていきましょう。
日付の比較方法
今回は2つの日付の比較方法を解説していきます。
それは「DateTimeクラス」を使用した方法と「strtotime( )関数」を使用した方法です。最後に説明いたしますが、日付の比較には、「DateTimeクラス」を使用した方法が推奨されていますので、そちらから解説しています。
・DateTimeクラスを使用した方法
では、DateTimeクラスを使用した方法について解説します。まず、DateTimeクラスに日付を指定してインスタンスを生成します。下記の$date4のように日付を指定しない場合は、現在の時刻を取得することができます。
$date1 = new DateTime('2020-01-01');
$date2 = new DateTime('2020-02-01');
$date3 = new DateTime('2020/01/01');
$date4 = new DateTime();//現在の時刻を取得
次に、if文による比較演算子を使用して日付を比較します。この時、新しい日付の方が大きく、古い日付が小さいと判定されますので注意してください。
if ($date1 < $date2) {
echo "新しい日付はdate2です";
} else {
echo "新しい日付はdate1です";
}
実行結果:
新しい日付はdate2です
また、$date1や$date3のようにDateTimeクラスに渡す日付の書式が違っても日付が同じであれば同値と判断されます。
if ($date1 == $date3) {
echo "date1とdate3は同日です";
}
実行結果:
date1とdate3は同日です
次は、diffメソッドを使用していきます。diffメソッドを使用することで日時の差を求めることができます。
$date5 = new DateTime('2020-01-01');
$date6 = new DateTime('2020-01-10');
$interval = $date5 -> diff($date6);
echo $interval -> d;
実行結果:
9
このように1月1日と1月10日を比較した場合、9日の差があることが分かりました。最後の行の「$interval -> d」の部分を「$interval -> m」とすることで月の差を求めることができます。同様に、「$interval -> y」とすることで年の差を求めることもできます。
以下がサンプルコードになります。
$date7 = new DateTime('2020-01-01');
$date8 = new DateTime('2022-02-10');
$interval = $date7 -> diff($date8);
echo $interval -> m.”ヶ月分 ”;
echo $interval -> y."ヶ年分";
実行結果:
1ヶ月分 2ヶ年分
このように、DateTimeクラスを使用することで日付の比較や差分を求めたりすることができます。
・strtotime( )関数を使用した方法
次は、strtotime( )関数を使用した方法を解説します。strtotime( )関数は引数に(2020-01-01)などの文字列を指定し、その文字列をUNIXタイムスタンプに変換してくれる関数です。UNIXタイムスタンプとは、1970年1月1日00:00:00秒からどれだけ経過したかの経過秒数になります。
つまり経過秒数の比較により、どちらが新しいか古いかを判断しているということです。
以下がサンプルコードになります。
$time1 = strtotime('2020-01-01');
$time2 = strtotime('2020-01-02');
if ($time1 < $time2) {
echo "time2の方が最近です";
} else if ($time1 > $time2) {
echo "time1の方が最近です";
} else {
echo "同時刻です";
}
実行結果:
time2の方が最近です
DateTimeクラスとstrtotime( )関数のどっちを使用すべき?
今まで2つの方法を紹介していましたが、phpバージョン5.2以降を利用されている場合は、DateTimeクラスを利用した方法が推奨されています。
それは、「2038年問題」という問題があるからです。「2038年問題」とは、UNIXタイムスタンプで発生することが考えられ、2038年1月19日3時14分7秒(UTC)を経過したらコンピュータが誤動作を起こし認識する時刻がおかしくなる可能性がある問題のことです。
phpバージョン5.2以降で導入されたDateTimeクラスは2038年問題をクリアしており、心配ありません。phpで日付を比較する場合、特にstrtotime( )関数を使う理由がなければ、DateTimeクラスを使用しましょう。
まとめ
いかがだったでしょうか。 日付の比較は、使用することが多いと思いますのでしっかり理解しておきましょう。 本記事でphpによる日付の比較方法についての理解が深まれば幸いです。