程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> 通過JS判斷參數日期是否為日本的祝日

通過JS判斷參數日期是否為日本的祝日

編輯:關於JSP

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. 
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ 
 
 
//--> 
 附件中第一個就是上面這個代碼,感覺很全,而且沒有升級什麼的,簡單測試了哈,沒問題,其它幾個文件也可以,但感覺不是很好,有升級。或有些功能不太全。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved