PHP

[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で指定月の月初と月末の日付を取得

これでいい感じに月末営業日が取れました。
さて、実サービスで使うときはどうしよう~。