function JapaneseGovernmentHoliDayCheck (myTime) {
var myHoliDay = false, myMonth = myTime.getMonth () + 1, myDate = myTime.getDate ();
if (JapaneseHoliDayCheck (myTime) == 1) {
if (myTime.getFullYear () * 372 + myMonth * 31 + myDate >= 741180) {
myHoliDay = true;
} else {
if (Math.floor((myTime.getFullYear () * 372 + myMonth * 31 + myDate + 340) / 1240) * 3 + Math.ceil (myDate / 7) % 2 == 1791) {
myHoliDay = true;
} else;
}
} else {
if (JapaneseHoliDayCheck (myTime) >= 2) {
myHoliDay = true;
} else {
if (Math.floor ((myMonth * 31 + myDate + 331) / 366) != 1) {
myHoliDay = true;
} else;
}
}
return myHoliDay;
}
function JapaneseBankHoliDayCheck (myTime) {
var myHoliDay = false, myMonth = myTime.getMonth () + 1, myDate = myTime.getDate ();
if (JapaneseHoliDayCheck (myTime) == 1) {
if (myTime.getFullYear () * 372 + myMonth * 31 + myDate >= 739974) {
myHoliDay = true;
} else {
if (Math.floor ((myTime.getFullYear () * 372 + myMonth * 31 + myDate - 50) / 918) * 3 + Math.round ((myDate - 1) / 14) == 2416) {
myHoliDay = true;
} else {
if (Math.floor ((myTime.getFullYear () * 372 + myMonth * 31 + myDate - 516) / 1119) * 5 + Math.ceil (myDate / 7) == 3297) {
myHoliDay = true;
} else;
}
}
} else {
if (JapaneseHoliDayCheck (myTime) >= 2) {
myHoliDay = true;
} else {
if (Math.floor ((myMonth * 31 + myDate + 333) / 368) != 1) {
myHoliDay = true;
} else;
}
}
return myHoliDay;
}
function JapaneseHoliDayCheck (myTime) {
var myHoliDay, myHoliDayName = JapaneseHoliDay (myTime), myWeekDay = myTime.getDay ();
if (myHoliDayName == "国民の休日") {
myHoliDay = 3;
} else {
if (myHoliDayName == "振替休日") {
myHoliDay = 4;
} else {
if (myHoliDayName != "") {
myHoliDay = 5;
} else {
if (myWeekDay == 6) {
myHoliDay = 1;
} else {
if (myWeekDay == 0) {
myHoliDay = 2;
} else {
myHoliDay = 0;
}
}
}
}
}
return myHoliDay;
}
function JapaneseHoliDay (myTime) {
var myHoliDay = "";
var myCheckTime = new Date (myTime.getFullYear (), myTime.getMonth (), myTime.getDate (), 0, 0, 0);
var sw = 0, myHoliDay2, myCheckTime2, myVernalEquinox, myAutumnalEquinox, myYear, myMonth, myDate, myWeekDay;
if (myCheckTime.getTime () >= new Date(1948, 6, 20, 0, 0, 0).getTime ()) { // 戦後の祝日判定
// 新しい振替休日条項を、そのまま忠実に再現するのであれば、振休判定ロジックは次のようになる。
// for (i = 0; i <= 7; i ++) {
do { // 振替休日判定の方式をAddinBox方式に変更(月曜が祝日でない場合に前日の日曜の祝日判定を行い、祝日なら振休とする方式)
myCheckTime2 = new Date (myCheckTime.getFullYear (), myCheckTime.getMonth (), (myCheckTime.getDate () - sw), 0, 0, 0);
myHoliDay2 = "";
myYear = myCheckTime2.getFullYear ();
myMonth = myCheckTime2.getMonth () + 1;
myDate = myCheckTime2.getDate ();
myWeekDay = myCheckTime2.getDay (); // myWeekDayの値は日が1、月が2、火が3、水が4、木が5、金が6、土が7
switch (myMonth) {
// 月別の判定順を過労死しにくい月順に並べ替え
case 2: // 2月
if (myDate == 11) {
if (myYear >= 1967) {
myHoliDay2 = "建国記念の日";
} else;
} else {
if (myYear * 29 + myDate == 57705) {
myHoliDay2 = "昭和天皇の大喪の礼";
} else;
}
break;
case 7: // 7月
if (myYear >= 2003) {
if (Math.ceil (myDate / 7) * 7 + myWeekDay == 22) {
myHoliDay2 = "海の日";
} else;
} else {
if (Math.floor ((myYear - 1) / 7) * 31 + myDate == 8855) {
myHoliDay2 = "海の日";
} else;
}
break;
case 1: // 1月
if (myDate == 1) {
myHoliDay2 = "元日";
} else {
if (myYear >= 2000) {
if (Math.ceil (myDate / 7) * 7 + myWeekDay == 15)
myHoliDay2 = "成人の日";
} else;
} else {
if (myDate == 15) {
myHoliDay2 = "成人の日";
} else;
}
}
break;
case 8: // 8月
break;
case 9: // 9月
if (myYear < 2151) { // 秋分の計算
if (myYear >= 2100) {
myAutumnalEquinox = Math.floor (24.2488 + 0.242194 * (myYear - 1980) - Math.floor((myYear - 1980) / 4));
} else {
if (myYear >= 1980) {
myAutumnalEquinox = Math.floor (23.2488 + 0.242194 * (myYear - 1980) - Math.floor((myYear - 1980) / 4));
} else {
if (myYear >= 1948) {
myAutumnalEquinox = Math.floor (23.2588 + 0.242194 * (myYear - 1980) - Math.floor((myYear - 1980) / 4));
} else;
}
}
} else {
myAutumnalEquinox = 99;
}
if (myDate == myAutumnalEquinox) {
myHoliDay2 = "秋分の日";
} else {
if (myYear >= 2003) {
if (Math.ceil (myDate / 7) * 7 + myWeekDay == 22) {
myHoliDay2 = "敬老の日";
} else {
if (myDate * 7 + myWeekDay == myAutumnalEquinox * 7 - 5) {
myHoliDay2 = "国民の休日";
} else;
}
} else {
if (Math.floor ((myYear - 5) / 37) * 30 + myDate == 1605) {
myHoliDay2 = "敬老の日";
} else;
}
}
break;
case 11: // 11月
if (myDate == 3) {
myHoliDay2 = "文化の日";
} else {
if (myDate == 23) {
myHoliDay2 = "勤労感謝の日";
} else {
if (myYear * 30 + myDate == 59712) {
myHoliDay2 = "即位礼正殿の儀";
} else;
}
}
break;
case 5: // 5月
if (myDate == 4) {
if (myYear >= 2007) {
myHoliDay2 = "みどりの日";
} else {
if (Math.floor ((myYear + 9) / 21) * 2 + Math.floor ((myWeekDay + 3) / 5) == 191) {
myHoliDay2 = "国民の休日";
} else;
}
} else {
// 新しい振替休日条項を、そのまま忠実に再現するのであれば、以下の振休判定は不要
// 2007年以降の憲法記念日orみどりの日が日曜日のケースのみ、ここで判定
if (myDate * 4 + Math.floor (myWeekDay / 2) == 25) {
if (myYear >= 2007) {
myHoliDay2 = "振替休日";
} else;
} else {
if (myDate == 3) {
myHoliDay2 = "憲法記念日";
} else {
if (myDate == 5) {
myHoliDay2 = "こどもの日";
} else;
}
}
}
break;
case 10: // 10月
if (myYear >= 2000) {
if (Math.ceil (myDate / 7) * 7 + myWeekDay == 15) {
myHoliDay2 = "体育の日";
} else;
} else {
if (Math.floor ((myYear - 5) / 37) * 31 + myDate == 1653) {
myHoliDay2 = "体育の日";
} else;
}
break;
case 12: // 12月
if (myDate == 23) {
if (myYear >= 1989) {
myHoliDay2 = "天皇誕生日";
} else;
} else;
break;
case 3: // 3月
if (myYear < 2151) { // 春分の計算
if (myYear >= 2100) {
myVernalEquinox = Math.floor (21.8510 + 0.242194 * (myYear - 1980) - Math.floor((myYear - 1980) / 4));
} else {
if (myYear >= 1980) {
myVernalEquinox = Math.floor (20.8431 + 0.242194 * (myYear - 1980)- Math.floor((myYear - 1980) / 4));
} else {
if (myYear >= 1949) {
myVernalEquinox = Math.floor (20.8357 + 0.242194 * (myYear - 1980) - Math.floor((myYear - 1980) / 4));
} else {
myVernalEquinox = 99;
}
}
}
} else {
myVernalEquinox = 99;
}
if (myDate == myVernalEquinox) {
myHoliDay2 = "春分の日";
} else;
break;
case 6: // 6月
if (myYear * 30 + myDate == 59799) {
myHoliDay2 = "皇太子徳仁親王の結婚の儀";
} else;
break;
default: // 4月
if (myDate == 29) {
if (myYear >= 2007) {
myHoliDay2 = "昭和の日";
} else {
if (myYear >= 1989) {
myHoliDay2 = "みどりの日";
} else {
myHoliDay2 = "天皇誕生日";
}
}
} else {
if (myYear * 30 + myDate == 58780) {
myHoliDay2 = "皇太子明仁親王の結婚の儀";
} else;
}
break;
}
// 新しい振替休日条項を、そのまま忠実に再現するのであれば、振休判定ロジックは次のようになる。
// if (sw == 0) {
// if (myHoliDay2 != "") {
// myHoliDay = myHoliDay2;
// break;
// } else {
// if (myCheckTime2.getTime () < new Date (2007, 0, 1, 0, 0, 0).getTime ()) {
// if (myWeekDay != 1) {
// break;
// } else;
// } else {
// if (myCheckTime2.getTime () < new Date (1973, 3, 12, 0, 0, 0).getTime ()) {
// break;
// } else;
// }
// }
// } else {
// if (myHoliDay2 != "") {
// if (myWeekDay == 0) {
// myHoliDay = "振替休日";
// break;
// } else;
// } else {
// break;
// }
// }
if (sw == 0) {
if (myHoliDay2 != "") {
myHoliDay = myHoliDay2;
break;
} else {
if (myWeekDay != 1) {
// 月曜以外は振替休日判定不要
// 2007年以降の憲法記念日・みどりの日の振替休日は上記ステップで処理済
// こどもの日の振替休日はここで判定する
break;
} else {
if (myYear * 372 + myMonth * 31 + myDate < 734092) {
break;
} else;
}
}
} else {
if (myHoliDay2 != "") {
myHoliDay = "振替休日";
} else;
}
} while (sw ++ == 0);
} else { // 戦前の祝日判定
if (myCheckTime.getTime () >= new Date(1873, 9, 14, 0, 0, 0).getTime ()) {
myYear = myCheckTime.getFullYear ();
myMonth = myCheckTime.getMonth () + 1;
myDate = myCheckTime.getDate ();
switch (myMonth) {
case 2: // 2月
if (myDate == 11) {
myHoliDay = "紀元節";
} else;
break;
case 7: // 7月
if (Math.floor ((myYear + 5) / 14) * 31 + myDate == 4277) {
myHoliDay = "明治天皇祭";
} else;
break;
case 1: // 1月
if (myDate == 3) {
myHoliDay = "元始祭";
} else {
if (myDate == 5) {
myHoliDay = "新年宴會";
} else {
if (Math.floor ((myYear - 2) / 39) * 31 + myDate == 1518) {
myHoliDay = "孝明天皇祭";
} else;
}
}
break;
case 8: // 8月
if (Math.floor ((myYear + 5) / 14) * 31 + myDate == 4278) {
myHoliDay = "天長節";
} else;
break;
case 9: // 9月
if (myYear < 1948) { // 秋分の計算
if (myYear >= 1900) {
myAutumnalEquinox = Math.floor (23.2588 + 0.242194 * (myYear - 1980) - Math.floor((myYear - 1980) / 4));
} else {
if (myYear >= 1878) {
myAutumnalEquinox = Math.floor (22.2588 + 0.242194 * (myYear - 1980) - Math.floor((myYear - 1980) / 4));
} else {
myAutumnalEquinox = 99;
}
}
} else {
myAutumnalEquinox = 99;
}
if (Math.floor ((myYear + 1) / 5) * 30 + myDate == 11267) {
myHoliDay = "神嘗祭";
} else {
if (Math.floor ((myYear + 12) / 70) * 30 + myDate == 810 + myAutumnalEquinox) {
myHoliDay = "秋季皇靈祭";
} else;
}
break;
case 11: // 11月
if (myDate == 3) {
if (myYear >= 1927) {
myHoliDay = "明治節";
} else {
if (myYear < 1912) {
myHoliDay = "天長節";
} else;
}
} else {
if (myDate == 23) {
myHoliDay = "新嘗祭";
} else {
if (Math.abs (myYear - 1921.5) * 30 + myDate == 205) {
myHoliDay = "即位ノ禮";
} else {
if (Math.abs (myYear - 1921.5) * 30 + myDate == 209) {
myHoliDay = "大嘗祭";
} else {
if (Math.abs (myYear - 1921.5) * 30 + myDate == 211) {
myHoliDay = "即位禮及大嘗祭後大饗第一日";
} else;
}
}
}
}
break;
case 5: // 5月
break;
case 10: // 10月
if (Math.floor ((myYear - 16) / 69) * 31 + myDate == 854) {
myHoliDay = "神嘗祭";
} else {
if (Math.floor ((myYear + 5) / 14) * 31 + myDate == 4278) {
myHoliDay = "天長節祝日";
} else;
}
break;
case 12: // 12月
if (Math.floor ((myYear + 5) / 21) * 31 + myDate == 2877) {
myHoliDay = "大正天皇祭";
} else;
break;
case 3: // 3月
if (myYear < 1949) { // 春分の計算
if (myYear >= 1900) {
myVernalEquinox = Math.floor (20.8357 + 0.242194 * (myYear - 1980) - Math.floor((myYear - 1980) / 4));
} else {
if (myYear >= 1879) {
myVernalEquinox = Math.floor (19.8277 + 0.242194 * (myYear - 1980) - Math.floor((myYear - 1980) / 4));
} else {
myVernalEquinox = 99;
}
}
} else {
myVernalEquinox = 99;
}
if (Math.floor ((myYear + 11) / 70) * 31 + myDate == 837 + myVernalEquinox) {
myHoliDay = "春季皇靈祭";
} else;
break;
case 6: // 6月
break;
default: // 4月
if (myDate == 3) {
myHoliDay = "神武天皇祭";
} else {
if (Math.floor ((myYear + 9) / 22) * 30 + myDate == 2669) {
myHoliDay = "天長節";
} else;
}
break;
}
} else;
}
return myHoliDay;
}
// 以下(Copyright)は必ず記載のこと
// Copyright (C) 2005 Kaihen Taisaku Hombu (Program-Renewal Research Institute). All Rights Reserved.