日本の祝日を計算する

Konfabulator pt.5スレでBar Calendarの改造コードがいくつか上がっている。
その中で祝日のデータをオンラインから読めないかという話が出ていたが、僕もちょっとググってみたんだけど、確かになかなかいいところが少ないようだ。ただ、とても参考になるところ(Public Holidays in Japan)を見つけたので、試しに計算で求めるJavascript functionを書いてみた。
http://pt.imaginet.ne.jp/~tambe/konfabulator/calcJpHolidays.js

eval(runCommand("cat calcJpHolidays.js"));
でincludeしておいて、
var holidays = calcJpHolidays(2004);
とするとholidaysに2004年の祝日を連想配列として
holidays["20040101"] = "元日"
holidays["20040112"] = "成人の日"

などという形で返す。
法改正がなく、春分秋分の日が予定からずれなければ、少なくとも2010年まではPublic Holidays in Japanに書かれてるのと同じ結果を返しているのを確認した。

改造版(祝日を赤にする)Bar calendarに組み込む場合

  1. konファイルと同じ階層に置き、onLoadの最初の方で
    eval(runCommand("cat calcJpHolidays.js"));
  2. displayMonth = Math.abs(month + baseMonth)%12;の次の行に
    var holidays = calcJpHolidays(displayYear);
  3. 祝日の色を変えるための処理として
    if( holidays[""+displayYear+ ("0"+(displayMonth+1)).substr(-2,2)+("0"+inserted).substr(-2,2) ] != undefined){
    dates[position].color = "#FF0000";
    dates[position].tooltip = holidays[""+displayYear+("0"+(displayMonth+1)).substr(-2,2)+("0"+inserted).substr(-2,2) ];
    }

とかするといい。
最後のtooltipはおまけでつけたやつだけど、Bar Calendar.konはなぜかEUCで書かれてるので、正しく表示するにはShift-JISに変えて保存すること。