PHPで公開日を指定する方法

スポンサーリンク

よく忘れて調べてしまいますので、備忘録を兼ねて残しておきたいと思います。

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;

コメント

タイトルとURLをコピーしました