PHP | 指定した日時になったらコンテンツの内容を更新する方法

PHP 日付・時刻,PHP

PHP | 指定した日時になったらコンテンツの内容を更新する方法

PHPのDateTime()を使って更新日になるまでの残り日数などを表示するパターンを含めて、指定した時間になったらコンテンツの内容を更新する方法を紹介しています。

※サンプルと表示結果は2021年に作成されたものです

現在日時と指定日のDateTimeオブジェクトを取得する

現在日時は引数を未指定としたDateTime()関数にてDateTimeオブジェクトを取得します。
DateTime()関数の引数に日時を入れる事で、指定日時のDateTimeオブジェクトを取得します。

date_default_timezone_set('Asia/Tokyo');
$today = new DateTime(); //現在日時
$update_day = new DateTime('2022-01-01 00:00:00'); //指定日時

print_r($today . '<br>');
print_r($update_day);

上記コードの表示結果は以下のようになります。

DateTime Object ( [date] => 2021-06-06 00:03:49.074539 [timezone_type] => 3 [timezone] => Asia/Tokyo )
DateTime Object ( [date] => 2022-01-01 00:00:00.000000 [timezone_type] => 3 [timezone] => Asia/Tokyo )

指定日時までの差分を取得する

DateTimeオブジェクトはdiff()関数を使って2つのオブジェクトの差分を取得する事ができます。

date_default_timezone_set('Asia/Tokyo');
$today = new DateTime();
$update_day = new DateTime('2022-01-01 00:00:00');
$diff = $today->diff($update_day);

print_r($diff);

上記コードの表示結果は以下のようになります。

DateInterval Object ( [y] => 0 [m] => 6 [d] => 26 [h] => 0 [i] => 2 [s] => 43 [f] => 0.029718 [weekday] => 0 [weekday_behavior] => 0 [first_last_day_of] => 0 [invert] => 0 [days] => 209 [special_type] => 0 [special_amount] => 0 [have_weekday_relative] => 0 [have_special_relative] => 0 )

取得結果で使う事が多いのは「y」「m」「d」「h」「i」「s」「 f」「days」かと思います。

y m d h i s f対象までの年月日時分秒、ミリ秒
days対象までの日数

指定日までの残り月数と日数を表示する

指定日までの残り月数と日数を表示して、指定日になったらコンテンツを更新するサンプルコードです。

指定日を過ぎているかどうかは、単純に現在日時と更新日のDateTimeオブジェクトを比較演算子で判別可能です。

残りの月数と日数は差分したDateTimeオブジェクトから取得します。

date_default_timezone_set('Asia/Tokyo');
$today = new DateTime();
$update_day = new DateTime('2022-01-01');
$diff = $today->diff($update_day);

if ($today > $update_day) {
	echo 'HAPPY NEW YEAR 2022';
} else {
	echo '2022年まであと、' . $diff->m . 'ヶ月と' . $diff->d . '日!';
}

上記コードの表示結果は以下のようになります。

2022年まであと、6ヶ月と25日!

現実的には残り1ヶ月を切った時に「0ヶ月」と表示するのもおかしいですので、もう少し処理が必要です。

指定日までの残り日数を表示する

現在日時と更新日を差分したDateTimeオブジェクトにある「today」を使って残り日数を表示しています。

date_default_timezone_set('Asia/Tokyo');
$today = new DateTime();
$update_day = new DateTime('2022-01-01');
$diff = $today->diff($update_day);

if ($today > $update_day) {
	echo 'HAPPY NEW YEAR 2022';
} else {
	echo '2022年まであと、' . $diff->days . '日!';
}

上記コードの表示結果は以下のようになります。

2022年まであと、209日!

単純に残り日数を表示するので、実装の手間は少ない。