web関連

期間で表示を切り替えるphp

期間で表示を切り替えるphp

毎月1日に更新があるお客さんのサイトの作業で、毎回手作業で追加するのめんどくさいので日付が来たら自動で変わる様に組んだ時の備忘録

期間を指定して表示を切り替えるphp

<?php
date_default_timezone_set('Asia/Tokyo');
$today = date('Ymd');
?>
<?php if ('20181001' <= $today && $today <= '20181031'): ?>
10月分の表示
<?php elseif('20181101' <= $today && $today <= '20181130'): ?>
11月分の表示
<?php elseif('20181201' <= $today && $today <= '20181231'): ?>
12月分の表示
<?php elseif('20190101' <= $today && $today <= '20190131'): ?>
1月分の表示
<?php elseif('20190201' <= $today && $today <= '20190228'): ?>
2月分の表示
<?php elseif('20190301' <= $today && $today <= '20190331'): ?>
3月分の表示
<?php elseif('20190401' <= $today && $today <= '20190430'): ?>
4月分の表示
<?php else: ?>
それ以外
<?php endif; ?>
ちょっと長い気がしたので関数にしてみる↓

関数にしてみた(wordpress)

function.php

<?php 
function display_period($before, $after){
  date_default_timezone_set('Asia/Tokyo');
  $today = date('Ymd');
  $branch = ($before <= $today && $today <= $after);
  return $branch;
}
 ?>

テンプレートファイルに書くコード

<?php if(display_period('20181001', '20181031')): ?>
10月分の表示
<?php elseif(display_period('20181101', '20181130')): ?>
11月分の表示
<?php elseif(display_period('20181201', '20181231')): ?>
12月分の表示
<?php elseif(display_period('20190101', '20190131')): ?>
1月分の表示
<?php elseif(display_period('20190201', '20190228')): ?>
2月分の表示
<?php elseif(display_period('20190301', '20190331')): ?>
3月分の表示
<?php elseif(display_period('20190401', '20190430')): ?>
4月分の表示
<?php else: ?>
それ以外
<?php endif; ?>
少しスッキリして見やすくなったかな

毎年毎年同じ月の同じ日で期間分けるんだったら以下のサイトが参考になるかも

▼【PHP】期間(日付)での条件分岐
http://ysklog.net/php/1173.html

追記:修正

上記のやり方だと、都度関数を呼び出すことになると指摘されたので修正

function.php

// 現在の「月」だけ返す関数
function get_month() {
    date_default_timezone_set('Asia/Tokyo');
    return date('m');
}
// 現在の「月」に合わせて表示を変える関数
function load_contents($month) {
    if ($month == 10) {
        echo "10月分の表示";
    }
    if ($month == 11) {
        echo "11月分の表示";
    }
    if ($month == 12) {
        echo "12月分の表示";
    }
    if ($month == 1) {
        echo "1月分の表示";
    }
    if ($month == 2) {
        echo "2月分の表示";
    }
    if ($month == 3) {
        echo "3月分の表示";
    }
    if ($month == 4) {
        echo "4月分の表示";
    }
}

テンプレートファイルに書くコード

<?php //出力用コード
$month = get_month();
load_contents($month); 
?>
完全に盲点だった…関数の呼び出しは少ない方がいいんすね
応用すれば任意の期間とかもできそうだし指摘ありがたい

関数も呼び出しが少ない方が良かったり、色々な方法で書く事ができるんだなと感じた