Js代碼
//另封裝了一個方法,周日也是休息日
Js代碼
//因沒看懂文件開頭寫的什麼,所以不好在原有文件直接再封裝方法,所以下面這個方法是在另一個JS文件中寫的。
Js代碼
function isHoliDays(sdate){//sdate="yyyy/mm/dd"
var tdate=new Date(sdate);
if(tdate.getDay()==0){
return true;
}else{
var ts=ktHolidayName(sdate);
if(ts!=""){
return true;
}else{
return false;
}
}
}
Js代碼
很全春分,秋分,振替休日等都有,並根據相關節假日發布時間開始算。
Js代碼
<!--
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/
//_/ CopyRight(C) K.Tsunoda(AddinBox) 2001 All Rights Reserved.
//_/ ( http://www.h3.dion.ne.jp/~sakatsu/index.htm )
//_/
//_/ この祝日判定コードは『Excel:kt関數アドイン』で使用している
//_/ VBAマクロを[JavaScript]に移植したものです。
//_/ この関數では、2007年施行の改正祝日法(昭和の日)までを
//_/ サポートしています(9月の國民の休日を含む)。
//_/
//_/ (*1)このコードを引用するに當たっては、必ずこのコメントも
//_/ 一緒に引用する事とします。
//_/ (*2)他サイト上で本マクロを直接引用する事は、ご遠慮願います。
//_/ 【 http://www.h3.dion.ne.jp/~sakatsu/holiday_logic.htm 】
//_/ へのリンクによる紹介で対応して下さい。
//_/ (*3)[ktHolidayName]という関數名そのものは、各自の環境に
//_/ おける命名規則に沿って変更しても構いません。
//_/
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//
// 2008/10/29 変數のvar指定が無く、広域変數扱いになっていたのを修正しました。
//
// 2011/3/20 FireFox3.5/3.6で使用した場合に間違った結果を返す場合がありました。
// FireFoxのJITコンパイラ(TraceMonkey)の不具合によるswitchステートメ
// ントの誤コンパイルが原因であると判明したため、switchを[if else]に
// 変更しました。なお、本スクリプトのバグではありませんので、FireFox
// 以外のブラウザでは問題は起きていません(修正前のswitchを使ったスク
// リプトでもFireFox以外のブラウザでは正常に動作します)。
// このFireFoxのバグに関する解説を下記に整理してあります。
// http://www.h3.dion.ne.jp/~sakatsu/FireFox_TMBugTest.htm
// 修正前のswitchを使ったバージョンは下記に殘してあります。
// http://www.h3.dion.ne.jp/~sakatsu/HolidayChk_switch.js
var MONDAY = 1;
var TUESDAY = 2;
var WEDNESDAY = 3;
// JavaScriptで扱える日付は1970/1/1~のみ
//var cstImplementTheLawOfHoliday = new Date("1948/7/20"); // 祝日法施行
//var cstAkihitoKekkon = new Date("1959/4/10"); // 明仁親王の結婚の儀
var cstShowaTaiso = new Date("1989/2/24"); // 昭和天皇大喪の禮
var cstNorihitoKekkon = new Date("1993/6/9"); // 徳仁親王の結婚の儀
var cstSokuireiseiden = new Date("1990/11/12"); // 即位禮正殿の儀
var cstImplementHoliday = new Date("1973/4/12"); // 振替休日施行
// [prmDate]には "yyyy/m/d"形式の日付文字列を渡す
function ktHolidayName(prmDate)
{
var MyDate = new Date(prmDate);
var HolidayName = prvHolidayChk(MyDate);
var YesterDay;
var HolidayName_ret;
if (HolidayName == "") {
if (MyDate.getDay() == MONDAY) {
// 月曜以外は振替休日判定不要
// 5/6(火,水)の判定はprvHolidayChkで処理済
// 5/6(月)はここで判定する
if (MyDate.getTime() >= cstImplementHoliday.getTime()) {
YesterDay = new Date(MyDate.getFullYear(),
MyDate.getMonth(),(MyDate.getDate()-1));
HolidayName = prvHolidayChk(YesterDay);
if (HolidayName != "") {
HolidayName_ret = "振替休日";
} else {
HolidayName_ret = "";
}
} else {
HolidayName_ret = "";
}
} else {
HolidayName_ret = "";
}
} else {
HolidayName_ret = HolidayName;
}
return HolidayName_ret;
}
//===============================================================
function prvHolidayChk(MyDate)
{
var MyYear = MyDate.getFullYear();
var MyMonth = MyDate.getMonth() + 1; // MyMonth:1~12
var MyDay = MyDate.getDate();
var NumberOfWeek;
var MyAutumnEquinox;
// JavaScriptで扱える日付は1970/1/1~のみで祝日法施行後なので下記は不要
// if (MyDate.getTime() < cstImplementTheLawOfHoliday.getTime()) {
// return ""; // 祝日法施行(1948/7/20)以前
// } else;
var Result = "";
// 1月 //
if (MyMonth == 1) {
if (MyDay == 1) {
Result = "元日";
} else {
if (MyYear >= 2000) {
NumberOfWeek = Math.floor((MyDay - 1) / 7) + 1;
if ((NumberOfWeek == 2) && (MyDate.getDay() == MONDAY)) {
Result = "成人の日";
} else;
} else {
if (MyDay == 15) {
Result = "成人の日";
} else;
}
}
return Result;
} else;
// 2月 //
if (MyMonth == 2) {
if (MyDay == 11) {
if (MyYear >= 1967) {
Result = "建國記念の日";
} else;
} else {
if (MyDate.getTime() == cstShowaTaiso.getTime()) {
Result = "昭和天皇の大喪の禮";
} else;
}
return Result;
} else;
// 3月 //
if (MyMonth == 3) {
if (MyDay == prvDayOfSpringEquinox(MyYear)) { // 1948~2150以外は[99]
Result = "春分の日"; // が返るので、必ず≠になる
} else;
return Result;
} else;
// 4月 //
if (MyMonth == 4) {
if (MyDay == 29) {
if (MyYear >= 2007) {
Result = "昭和の日";
} else {
if (MyYear >= 1989) {
Result = "みどりの日";
} else {
Result = "天皇誕生日";
}
}
} else {
// JavaScriptで扱える日付は1970/1/1~のみなので下記は不要
// if (MyDate.getTime() == cstAkihitoKekkon.getTime()) {
// Result = "皇太子明仁親王の結婚の儀"; // (=1959/4/10)
// } else;
}
return Result;
} else;
// 5月 //
if (MyMonth == 5) {
if (MyDay == 3) { // 5月3日
Result = "憲法記念日";
} else;
if (MyDay == 4) { // 5月4日
if (MyYear >= 2007) {
Result = "みどりの日";
} else {
if (MyYear >= 1986) {
if (MyDate.getDay() > MONDAY) {
// 5/4が日曜日は『只の日曜』、月曜日は『憲法記念日の振替休日』(~2006年)
Result = "國民の休日";
} else;
} else;
}
} else;
if (MyDay == 5) { // 5月5日
Result = "こどもの日";
} else;
if (MyDay == 6) { // 5月6日
if (MyYear >= 2007) {
if ((MyDate.getDay() == TUESDAY) || (MyDate.getDay() == WEDNESDAY)) {
Result = "振替休日"; // [5/3,5/4が日曜]ケースのみ、ここで判定
} else;
} else;
} else;
return Result;
} else;
// 6月 //
if (MyMonth == 6) {
if (MyDate.getTime() == cstNorihitoKekkon.getTime()) {
Result = "皇太子徳仁親王の結婚の儀";
} else;
return Result;
} else;
// 7月 //
if (MyMonth == 7) {
if (MyYear >= 2003) {
NumberOfWeek = Math.floor((MyDay - 1) / 7) + 1;
if ((NumberOfWeek == 3) && (MyDate.getDay() == MONDAY)) {
Result = "海の日";
} else;
} else {
if (MyYear >= 1996) {
if (MyDay == 20) {
Result = "海の日";
} else;
} else;
}
return Result;
} else;
// 8月 //
if (MyMonth == 8) {
return ""; // (祝日は無い)
} else;
// 9月 //
if (MyMonth == 9) {
//第3月曜日(15~21)と秋分日(22~24)が重なる事はない
MyAutumnEquinox = prvDayOfAutumnEquinox(MyYear);
if (MyDay == MyAutumnEquinox) { // 1948~2150以外は[99]
Result = "秋分の日"; // が返るので、必ず≠になる
} else {
if (MyYear >= 2003) {
NumberOfWeek = Math.floor((MyDay - 1) / 7) + 1;
if ((NumberOfWeek == 3) && (MyDate.getDay() == MONDAY)) {
Result = "敬老の日";
} else {
if (MyDate.getDay() == TUESDAY) {
if (MyDay == (MyAutumnEquinox - 1)) {
Result = "國民の休日";
} else;
} else;
}
} else {
if (MyYear >= 1966) {
if (MyDay == 15) {
Result = "敬老の日";
} else;
} else;
}
}
return Result;
} else;
// 10月 //
if (MyMonth == 10) {
if (MyYear >= 2000) {
NumberOfWeek = Math.floor(( MyDay - 1) / 7) + 1;
if ((NumberOfWeek == 2) && (MyDate.getDay() == MONDAY)) {
Result = "體育の日";
} else;
} else {
if (MyYear >= 1966) {
if (MyDay == 10) {
Result = "體育の日";
} else;
} else;
}
return Result;
} else;
// 11月 //
if (MyMonth == 11) {
if (MyDay == 3) {
Result = "文化の日";
} else {
if (MyDay == 23) {
Result = "勤労感謝の日";
} else {
if (MyDate.getTime() == cstSokuireiseiden.getTime()) {
Result = "即位禮正殿の儀";
} else;
}
}
return Result;
} else;
// 12月 //
if (MyMonth == 12) {
if (MyDay == 23) {
if (MyYear >= 1989) {
Result = "天皇誕生日";
} else;
} else;
return Result;
} else;
}
//===================================================================
// 春分/秋分日の略算式は
// 『海上保安庁水路部 暦計算研究會編 新こよみ便利帳』
// で紹介されている式です。
function prvDayOfSpringEquinox(MyYear)
{
var SpringEquinox_ret;
if (MyYear <= 1947) {
SpringEquinox_ret = 99; //祝日法施行前
} else {
if (MyYear <= 1979) {
// Math.floor 関數は[VBAのInt関數]に相當
SpringEquinox_ret = Math.floor(20.8357 +
(0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
} else {
if (MyYear <= 2099) {
SpringEquinox_ret = Math.floor(20.8431 +
(0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
} else {
if (MyYear <= 2150) {
SpringEquinox_ret = Math.floor(21.851 +
(0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
} else {
SpringEquinox_ret = 99; //2151年以降は略算式が無いので不明
}
}
}
}
return SpringEquinox_ret;
}
//=====================================================================
function prvDayOfAutumnEquinox(MyYear)
{
var AutumnEquinox_ret;
if (MyYear <= 1947) {
AutumnEquinox_ret = 99; //祝日法施行前
} else {
if (MyYear <= 1979) {
// Math.floor 関數は[VBAのInt関數]に相當
AutumnEquinox_ret = Math.floor(23.2588 +
(0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
} else {
if (MyYear <= 2099) {
AutumnEquinox_ret = Math.floor(23.2488 +
(0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
} else {
if (MyYear <= 2150) {
AutumnEquinox_ret = Math.floor(24.2488 +
(0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
} else {
AutumnEquinox_ret = 99; //2151年以降は略算式が無いので不明
}
}
}
}
return AutumnEquinox_ret;
}
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/ CopyRight(C) K.Tsunoda(AddinBox) 2001 All Rights Reserved.
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//-->
附件中第一個就是上面這個代碼,感覺很全,而且沒有升級什麼的,簡單測試了哈,沒問題,其它幾個文件也可以,但感覺不是很好,有升級。或有些功能不太全。