【PHP】期間内の祝日・定休日などを含んだ日付情報を取得する


1.まず最初に、開始日と終了日で指定した期間内の日付リストを「Y-m-d」形式の配列で取得する関数を用意します。

/**
 * 期間内の日付(Y-m-d 形式)を取得する
 *
 * @param       string      $date_start     開始日(Y-m-d)
 * @param       string      $date_end       終了日(Y-m-d)
 * @return      array                       日付の配列
 */
function getDateList($date_start, $date_end) {

    $DateTime = new DateTime($date_start);

    $date_list = array();

    while ($DateTime->format('Y-m-d') <= $date_end){ $date_list[] = $DateTime->format('Y-m-d');

        $DateTime->add(new DateInterval('P1D'));        // 1日加算
    }

    return $date_list;
}

 

2.次に、開始日と終了日で指定した期間内の日付情報を配列で取得する関数を用意します。

先程の関数と、Google Calendar API を合わせることで、期間内の定休日・祝日情報などを取得することが可能になります。

/**
 * 期間内の日付情報を取得
 *
 * @param       string      $date_start     開始日(Y-m-d)
 * @param       string      $date_end       終了日(Y-m-d)
 * @param       array       $option         オプション
 *                array       holiday         定休日の曜日番号(0:日曜 ... 6:土曜)
 * @return      array                       日付の配列
 */
function getDateInfo($date_start, $date_end, $option = array()) {

    $date_list = getDateList($date_start, $date_end);
    $holiday_list = getHolidayList($date_start, $date_end);

    $date_info = array();

    foreach ($date_list as $d_val) {

        $DateTime = new DateTime($d_val);

        $date = $DateTime->format('Y-m-d');
        $w = $DateTime->format('w');

        if (isset($option['holiday']) && in_array($w, $option['holiday'])) {
            $date_info[$date]['holiday'] = 1;

        } elseif (in_array($d_val, $holiday_list)) {
            $date_info[$date]['holiday'] = 1;

        } else {
            $date_info[$date]['holiday'] = 0;
        }
    }

    return $date_info;
}

 

3.「getHolidayList 関数」を用意します。
詳細は、以下の記事に載っています。
【PHP】Google Calendar API を使用して、日本の祝日を取得する方法

 

4.関数を呼び出します。

$option = array(
    'holiday' => array(
        0,        // 日曜
        6,        // 土曜
    ),
);

$date_list = getDateInfo('2017-11-01', '2017-12-31', $option);

option に休日を設定できます。
上記の例では「土」「日」が休日の場合の指定方法です。

戻り値について。
休日の場合は「holiday」が「1」
平日の場合は「holiday」が「0」
で返ってきます。

ちなみに「option」と「返り値」に「holiday」を付けて配列の階層を深くしているのは、「曜日」を返せるようにしたりなどの拡張を見越してです。


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です