phpで日本の祝日や振替休日を出力する。

いまさらですが、あけましておめでとうございます。HTML5KARUTAに参加させていただいたり、引っ越しがあったりでブログがろくに書けませんでした。今年もよろしくお願いします。

そして、今回の内容ですが、元ネタは Google Calendar API から日本の祝日データを取得 | memo.dogmap.jpです。

function get_holidays_this_month($month){

    $holidays_url = sprintf(
            'http://www.google.com/calendar/feeds/%s/public/full-noattendees?start-min=%s&start-max=%s&max-results=%d&alt=json' ,
            '[email protected]' ,
            '2013-'.$month.'-01' ,  // 取得開始日
            '2013-'.$month.'-31' ,  // 取得終了日
            31            // 最大取得数
            );
    if ( $results = file_get_contents($holidays_url) ) {
            $results = json_decode($results, true);
            $holidays = array();
            foreach ($results['feed']['entry'] as $val ) {
                    $date  = $val['gd$when'][0]['startTime'];
                    $week = date('w',strtotime($date));
                    $title = $val['title']['$t'];
                    $holidays[$date] = $title;

                    if( $week == 0) {
                        $nextday = date('Y-m-d',strtotime('+1 day', strtotime($date)));
                        $holidays[$nextday] = '振替休日';
                    }

                    $before_yesterday = date('Y-m-d',strtotime('-2 day', strtotime($date)));

                    if(isset($holidays[$before_yesterday])){
                        $yesterday = date('Y-m-d',strtotime('-1 day', strtotime($date)));
                        $holidays[$yesterday] = '国民の休日';
                    }

            }
            ksort($holidays);
    }
    return $holidays;
}

とりあえず1か月分の祝日を取得します。ついでに振替休日やら、国民の休日にも対応してみました。国民の休日なんてめったにあるもんじゃないんですけど、2015年にまたあるようなので、とりあえず実装してみました。イベントスケジュールとかを作るときに結構便利です。

追記:http://memo.dogmap.jp/2013/01/25/re-google-calendar-japanese-holidays/

確かに・・・・