よく忘れて調べてしまいますので、備忘録を兼ねて残しておきたいと思います。
DateTime()による比較
私がよく使う方法としては DateTime()関数を使った比較です。
$now = new DateTime();
$now = $now->format('Y-m-d H:i:s');
$target_day = new DateTime('2021-04-01 10:00:00');
$target_day = $target_day->format('Y-m-d H:i:s');
if ( $now >= $target_day ) : // 2021年4月1日 10:00公開
// 処理
endif;
1行目で今日の日付のオブジェクトを作り、2行目で日付のフォーマットを指定して、変数$nowに代入しています。
3行目で指定の日付(今回の例では2021年4月1日10時)のオブジェクトを作り、4行目で今日の日付と同じフォーマットにして、変数$target_dayに代入しています。
6行目のif文にて$now と $target_dayを比較、$nowの日付が$target_day以降の場合に処理を実行するという流れとなります。
date()による比較
以下のようなもっとシンプルな書き方も可能です。
if ( (int)date('YmdH') >= 2021040110 ) :
// 処理
endif;
date(‘YmdH’)を実行すると、例として、2021040109というような文字列が取得できます。その文字列をintでキャストして型を数字としています。
上記の例は、今日の日付で組み立てた数字と、指定した数字(上記の例では2021040110)の比較ですので、
2021年4月1日9時10分頃に実行した場合
2021040109 >= 2021040110 の場合は false,
2021年4月1日10時10分頃に実行した場合
202104010 >= 2021040110 の場合は true,
という結果になります。
意図した時間に動かないな?と思ったら
サーバー側で意図した時間(例えば日本時間など)の設定をしていない場合、date_default_timezone_setでタイムゾーンの設定も忘れずに指定。
if ( date_default_timezone_get() != "Asia/Tokyo" ) :
date_default_timezone_set("Asia/Tokyo");
endif;
コメント