掲載期間を設定したキャンペーン表示するPHP
指定の期日内だけ、キャンペーン情報を表示させるPHPです。
2022年7月31日までのキャンペーンがあったとして、以下のように記述すると2022年7月31日までは表示され、8月1日以降は何も表示されなくなります。
日付比較をして、指定年月日内だったら表示させるという仕組みですね。
2022年7月31日までのキャンペーン用設定
<?php //掲載終了日を設定 $end_date = new DateTime("2022-08-01"); //掲載終了日前だったら表示させる if($end_date >= new DateTime()){ echo '<p>期間限定 2022年7月31日まで!</p>'; } ?>
日付比較PHP 実際の動作
8月1日以降は何も表示されませんが、それ以前であれば「期間限定 2022年7月31日まで!」と表示されます。
今日は2024年09月12日です。
日付比較 PHPコードの解説
$end_date で終了日時を設定します。
この時に、キャンペーン終了年月日 +1日を指定します。
この日以降は表示しないという年月日を設定。
比較式がそうなっているからなんですが。
終了年月日にDateTimeの設定
終了年月日は DateTimeクラスを使用して、指定の日時をセットします。
$end_date = new DateTime("2022-08-01");
DateTimeを使わないと、ただの文字比較になって思わぬ動作をする場合がありますので注意です。
$end_date = '2022-08-01' ←これはNGパターン。
日付の比較を行う
if($end_date >= new DateTime()){
ここでif文を使って、終了年月日と、現在日時の比較をしています。
new DateTime()と、日付を入れないと現在の年月日を取得するので、それと$end_dateを比較しているわけですね。
現在の年月日より終了日時の方が大きい場合、という構文になっています。
キャンペーン期間内の記述をする
if文がTrueだった場合の処理を記載して完了です。
echo '<p>期間限定 2022年7月31日まで!</p>';
キャンペーン終了時に終わったメッセージを追加する
勘の良い方ならお気づきだと思いますが、elseを追加すれば終了時にメッセージを追加できます。
<?php //掲載終了日を設定 $end_date = new DateTime("2022-08-01"); //掲載終了日前だったら表示させる if($end_date >= new DateTime()){ echo '<p>期間限定 2022年7月31日まで!</p>'; }else{ echo '<p>キャンペーンは終了しました。</p>'; } ?>
今日は2024年09月12日です。
キャンペーンは終了しました
2022年8月1日以降は、キャンペーンは終了しましたと表示されます。
開始日~終了日までの設定
開始日前に準備しておいて、終了日がきたら非表示にする場合のコードです。
if文で作るとコードがわかりづらくなるのでswitch文で記述します。
<?php //開始日の設定 $start_date = new DateTime("2022-07-01"); //掲載終了日を設定 $end_date = new DateTime("2022-08-01"); //現在年月日の取得 $now_date = new DateTime(); switch($now_date){ //開始日より前の場合 case $start_date >= $now_date: echo '開始日前です'; break; //終了日以降の場合 case $end_date <= $now_date; echo 'キャンペーンは終了しました'; break; //掲載期間中 default: echo '期間限定 2022年7月31日まで!'; break; } ?>
開始日~終了日 実際の動作
今日は2024年09月12日です。
キャンペーンは終了しました
開始日~終了日のコード解説
開始日を変数に代入します。
$start_date = new DateTime("2022-07-01");
現在年月日を比較に何度か使うので、変数化しておきます。
$now_date = new DateTime();
switch文で、現在年月日を比較対象にして、caseで比較演算子で比較します。
開始日前の処理
case $start_date >= $now_date:
2022年7月1日から開始なので、開始日($start_date)が現在年月日より大きければtrueになります。
開始前にわざわざ「開始日前です」と書く必要はないと思いますが、例文なので。
わかりやすく記述すると、今日が2022年6月30日だとしたら、
2022年7月1日 >= 2022年6月30日 という比較になります。
この場合は、キャンペーン前なので、キャンペーン前のメッセージが表示されると。
現在日時が2022年7月1日以上の場合、このcaseをスルーして次の処理に進みます。
終了日以降の処理
case $end_date <= $now_date;
これはさっきまでと同じ処理ですね。
if文がswith文に変わっただけです。
終了日よりも小さい場合は、この処理を抜けて、次の「default」に進みます。
掲載期間中の表示
default:
defaultはcaseがどちらも当たらなかった場合の処理になります。
なので、掲載開始日以降で、終了日前の場合はこの処理が走ります。
比較日を増やせばさらに細かく表示ができます
このswitch文に、キャンペーン終了7日前の条件を追加すれば、
「お急ぎください!終了まであと7日」のような表示も可能です。
期間限定の訴求はかなり強いので、うまく使うことで売上を増やすことが可能です。
PHPで書くとソースコードに残らないメリット
日付比較で表示・非表示を切り替えるコードの紹介でした。
似たようなことはJavaScriptでも実現可能ですが、JavaScriptで書くとソースコードに記述が残り、キャンペーンがやっていたと見る人が見るとわかります。
(そんなこと気にする必要はないような気もしますが。)
PHPで記述すると、サーバーサイドで処理されるので、PHPコードそのものはブラウザにレンダリングされません。
あと、個人的にはPHPのが記述が簡単です。
ランダムバナー表示と絡めてつかったり、色々と応用の効くコードになっています。
以上、期間を設定したキャンペーン用設定でした。