PCに関するTipsを公開しています。

スクロールカレンダーの祝日修正

Windows7から提供されてきた「デスクトップガジェット」だが、Windows8からはセキュリティー上の理由により廃止された。しかし、その後も一定の需要があるためか、サードパーティーよりWindows10でも利用可能な「8GadgetPack」として公開されている。

8GadgetPack
https://8gadgetpack.net/

筆者も「8GadgetPack」に同梱されている「スクロールカレンダー」を愛用しているが、残念な事に祝日のメンテナンスが停滞しているようで、天皇誕生日などが正しく表示されない不具合がある。デスクトップガジェットは、HTMLやJavaScriptで記述されており、テキストベースで修正可能なので、祝日を定義している箇所を解析してみた。

設定ファイルは、通常では表示されないフォルダー内にあるため、以下の手順で修正を行う。

6行目、元号を追加する。

var yg=[[1867,"明治"],[1911,"大正"],[1925,"昭和"],[1988,"平成"],[2018,"令和"]];

190行からの「case 1」〜「case 12」までを修正する。

	case 1:
		shn(1+o,"元日");
		shm(2,"成人の日");
		break;
	case 2:
		shn(11+o,"建国記念の日");
		if (dt.getFullYear() >= 2020) {
		shn(23+o,"天皇誕生日");
		}
		break;
	case 3:
		shn(Math.floor(20.8431+ss(dt))+o,"春分の日");
		break;
	case 4:
		if (dt.getFullYear() >= 1989 && dt.getFullYear() <= 2006) {
		shn(29+o,"みどりの日");
		} else if (dt.getFullYear() >= 2007) {
		shn(29+o,"昭和の日");
		}
		if (dt.getFullYear() == 2019) {
		shn(30+o,"国民の休日");
		}
		break;
	case 5:
		shn(3+o,"憲法記念日");
		if (dt.getFullYear() <= 2006) {
		shn(4+o,"国民の休日");
		} else if (dt.getFullYear() >= 2007) {
		shn(4+o,"みどりの日");
		}
		var dow = shn(5+o,"こどもの日");
		if (dt.getFullYear() >= 2007) {
			if (dow == 1 || dow == 2) {
			shn(6+o,"振替休日");
			}
		}
		if (dt.getFullYear() == 2019) {
		shn(1+o,"天皇即位の日");
		shn(2+o,"国民の休日");
		}
		break;
	case 7:
		if (dt.getFullYear() >= 1996) {
			if (dt.getFullYear() == 2020) {
			shn(23+o,"海の日");
			shn(24+o,"スポーツの日");
			} else if (dt.getFullYear() == 2021) {
			shn(22+o,"海の日");
			shn(23+o,"スポーツの日");
			} else {
			shm(3,"海の日");
			}
		} 
		break;
	case 8:
		if (dt.getFullYear() >= 2016) {
			if (dt.getFullYear() == 2020) {
			shn(10+o,"山の日");
			} else if (dt.getFullYear() == 2021) {
			shn(8+o,"山の日");
			} else {
			shn(11+o,"山の日");
			}
		}
		break;
	case 9:
		shm(3,"敬老の日");
		var sb=Math.floor(23.2488+ss(dt))+o;
		if(shn(sb,"秋分の日")==3) shn(sb-1,"国民の休日");
		break;
	case 10:
		if (dt.getFullYear() <= 2019) {
		shm(2,"体育の日");
		} else if (dt.getFullYear() >= 2022) {
		shm(2,"スポーツの日");
		}
		if (dt.getFullYear() == 2019) {
		shn(22+o,"即位礼正殿の儀");
		}
		break;
	case 11:
		shn( 3+o,"文化の日");
		shn(23+o,"勤労感謝の日");
		break;
	case 12:
		if (dt.getFullYear() >= 1989 && dt.getFullYear() <= 2018) {
		shn(23+o,"天皇誕生日");
		}
		break;

上記では、過去の祝日もできるだけ正しく表示されるように修正してみたが、修正の必要がない月のコードには手を付けていないため「case 1」〜「case 12」まで、全てコピペすればOK。

尚、デフォルトでは2006年以前と2100年以降の祝日が表示されないが、44行目の

	if(2006<i && i<2100) hld(ldt);

の数字部分を修正すれば表示されるようになる。但し、過去の全ての祝日が正しく表示される訳ではないため、参考程度に留めておきたい。