祝日とJavaScript

祝日とJavaScript

プレゼンテーション

祝日とJavaScript

日本の祝日を管理するのはめんどい

GoogleAPI

使い方

    <script charset="euc-jp" src="http://www.google.com/calendar/feeds/japanese@holiday.calendar.google.com/public/full?start-min=2007-01-01&start-max=2008-01-01&max-results=20&alt=json-in-script&callback=handleJson"></script>

Googleからかえってくるデータからハッシュ

function generate_holiday_data_from_google_json(holiday_json) {
    holiday_json.feed.entry.each( function(entry) {
        var start = entry['gd$when'][0].startTime;

        var year  = start.slice(0,  4);
        var month = start.slice(5,  7);
        var day   = start.slice(8, 10);

        holidays[new Date(year, month-1, day).ymd()] = 1;
    });
}

平日にまるめる

function generate_holiday_data_from_google_json(holiday_json) {
    holiday_json.feed.entry.each( function(entry) {
        var start = entry['gd$when'][0].startTime;

        var year  = start.slice(0,  4);
        var month = start.slice(5,  7);
        var day   = start.slice(8, 10);

        holidays[new Date(year, month-1, day).ymd()] = 1;
    });
}

コールバック

function handleJson (holiday_json) {
    // 祝日データを構成
    generate_holiday_data_from_google_json(holiday_json);

    // 基準日を設定
    var today = new Date();
    $("today").innerHTML = today.ymd();

    // 支払い区分データを生成
    var rows = kubuns.map( function(kubun) {
        var result_kubun = {number: kubun.number, month: kubun.month, day : kubun.day};
        [{name: 'last_month', month: -1}, {name: 'this_month', month: 0}, {name: 'next_month', month: +1}].each(function (type) {
            var basis_date = new Date(today.getFullYear(), today.getMonth() + type.month, today.getDay());
            result_kubun[type.name] = kubun2collect_date(basis_date, parseInt(kubun.day), parseInt(kubun.month)).ymd();
        });
        return result_kubun;
    });
    Jemplate.process('shiharai.html', {rows: rows}, $('dest'));
}

こんなかんじ。

おわり。