Edited at

[PHP] 祝日APIを使って月末営業日を求める


月末営業日を求める

日本の土日祝日を除く月末最終日を求めたいときー!←

祝日データをDBに持つのも煩わしいし、APIが公開されていないだろうかとぐぐってみると、Googleカレンダーを使ったものが数多く出てきますね。

Google Calendar API を使って祝日を取る PHP編

上が正攻法だと思いますが、今回はちょっと実験してみたい…ということで次のAPIをお試しで使わせていただきました。

日本の祝日を JSON / CSV 形式で返す API


祝日を取得

function getHolidays($year) {

$ch = curl_init();

$options = array(
CURLOPT_URL => "https://holidays-jp.github.io/api/v1/{$year}/date.json",
CURLOPT_RETURNTRANSFER => true,
);

curl_setopt_array($ch, $options);

$res = curl_exec($ch);

return array_keys((array)json_decode($res));
}


年をパラメータに一覧を取得して、日付だけの配列を返す関数にしました。


月末営業日

$year = 2018; //パラメータ「年」

$month = 4; //パラメータ「月」

$holidays = getHolidays($year);

$last = date('Y-m-d', strtotime('last day of ' . $year . '-' . $month)); //月の最終日
$date = new DateTime($last);
while(true) {
$w = (int)$date->format('w');
//土日以外
if ($w > 0 && $w < 6) {
//祝日リストにない
if (!in_array($date->format('Y-m-d'), $holidays, true)) {
echo $date->format('Y/m/d');
break;
}
}
$date->modify('-1 days');
}


月末の取り方は↓を参考

PHPで指定月の月初と月末の日付を取得

これでいい感じに月末営業日が取れました。

さて、実サービスで使うときはどうしよう~。