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」を付けて配列の階層を深くしているのは、「曜日」を返せるようにしたりなどの拡張を見越してです。