javascriptで休日判定

UWSCで休日判定する際に休日について調べた。
UWSCで祝日を算出する - じゅんじゅんのきまぐれ
その知識を利用して、javascriptで休日判定コードを書いてみた。
2007年以降用ね。(休日の名前を問わない場合は、2003/05/07以降使える)

追記 2018/06/25
2020年東京オリンピック周りの変更を反映。

追記 2014/05/27
「山の日」追加

スクリプト

休日(か日曜)なら、1。休日かつ日曜なら、2。それ以外は0を返す。

var isHoliday = function(d, f) {
	var ret = 0, dy = d.getFullYear(), dm = d.getMonth(), dd = d.getDate(), da = d.getDay(), b = dy - 1980;
	if(da == 0) ret++;
	switch(dm) {
	case 0:
		if(dd == 1) ret++;	// 元旦
		if(da == 1 && Math.ceil(dd / 7) == 2) ret++;	// 成人の日
		break;
	case 1:
		if(dd == 11) ret++;	// 建国記念の日
		if(dd == 23 && dy > 2019) ret++;	// 天皇誕生日
		break;
	case 2:
		if(dd == Math.floor(20.8431+0.242194*b)-Math.floor(b/4)) ret++;	// 春分の日
		break;
	case 3:
		if(dd == 29) ret++;	// 昭和の日
		break;
	case 4:
		if(dd == 3 || dd == 4 || dd == 5) ret++;	// 憲法記念日 みどりの日 こどもの日
		break;
	case 5:
		break;
	case 6:
		if(dy == 2020) {
			if(dd == 23 || dd == 24) ret++;	// 海の日 スポーツの日。2020年特例
		} else {
			if(da == 1 && Math.ceil(dd / 7) == 3) ret++;	// 海の日
		}
		break;
	case 7:
		if(dd == 11 && dy > 2015 && dy != 2020) ret++;      // 山の日
		if(dd == 10 && dy == 2020) ret++;      // 山の日。2020年特例
		break;
	case 8:
		if(da == 1 && Math.ceil(dd / 7) == 3) ret++;	// 敬老の日
		if(dd == Math.floor(23.2488+0.242194*b)-Math.floor(b/4)) ret++;	// 秋分の日
		break;
	case 9:
		if(da == 1 && Math.ceil(dd / 7) == 2 && dy != 2020) ret++;	// 体育の日。2020年以降はスポーツの日
		break;
	case 10:
		if(dd == 3 || dd == 23) ret++;	// 文化の日(明治節) 勤労感謝の日(新嘗祭)
		break;
	case 11:
		if(dd == 23 && dy < 2019) ret++;	// 平成天皇誕生日
		break;
	}

	// 振替休日・国民の休日判定
	if(!f) {
		var p = new Date();
		p.setTime(d.getTime() - 24 * 3600000);
		while(isHoliday(p, true) == 1) p.setTime(p.getTime() - 24 * 3600000);
		if(isHoliday(p, true) == 2) {
			ret++;
		} else {
			var n = new Date();
			n.setTime(d.getTime() + 24 * 3600000);
			p.setTime(d.getTime() - 24 * 3600000);
			if((p.getDay() > 0 && isHoliday(p) == 1) && (isHoliday(n, true) == 2 || (n.getDay() > 0 && isHoliday(n, true) == 1))) ret++;
		}
	}

	return ret;
}


第一引数にDateオブジェクトを渡せば、判定します。
第二引数は内部使用(振替休日と国民の休日判定用)。
グローバル汚染しているので、実使用時には修正した方が良いかも。


2007年より前を知りたい場合、以下を参考にがんばってね。
UWSCで1949年以降の祝日を算出する - じゅんじゅんのきまぐれ