PageSourceSearch

https://tsukasabotan.co.jp/cal/HolidayChk.js

js tsukasabotan.co.jp collected 2026-10-02 14:34:32 UTC 9,807 bytes, 295 lines download raw bytes

1<!--
2//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
3//_/
4//_/ CopyRight(C) K.Tsunoda(AddinBox) 2001 All Rights Reserved.
5//_/ ( AddinBox  http://addinbox.sakura.ne.jp/index.htm )
6//_/ (   旧サイト  http://www.h3.dion.ne.jp/~sakatsu/index.htm )
7//_/
8//_/ この祝日判定コードは『Excel:kt関数アドイン』で使用している
9//_/ VBAマクロを[JavaScript]に移植したものです。
10//_/ この関数では、2016年施行の改正祝日法(山の日)までを
11//_/ サポートしています。
12//_/
13//_/ (*1)このコードを引用するに当たっては、必ずこのコメントも
14//_/ 一緒に引用する事とします。
15//_/ (*2)他サイト上で本マクロを直接引用する事は、ご遠慮願います。
16//_/ 【 http://addinbox.sakura.ne.jp/holiday_logic.htm 】
17//_/ へのリンクによる紹介で対応して下さい。
18//_/ (*3)[ktHolidayName]という関数名そのものは、各自の環境に
19//_/ おける命名規則に沿って変更しても構いません。
20//_/
21//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
22//
23// 2008/10/29 変数のvar指定が無く、広域変数扱いになっていたのを修正しました。
24//
25// 2014/5/29 「山の日」の祝日法改正
26//
27// 2015/7/11  JavaScript1.3 以降では[1970/1/1]以前も扱えるため、日付範囲の制限を解除
28
29
30var MONDAY = 1;
31var TUESDAY = 2;
32var WEDNESDAY = 3;
33
34var cstImplementTheLawOfHoliday = new Date("1948/7/20");  // 祝日法施行
35var cstAkihitoKekkon = new Date("1959/4/10");              // 明仁親王の結婚の儀
36var cstShowaTaiso = new Date("1989/2/24");                // 昭和天皇大喪の礼
37var cstNorihitoKekkon = new Date("1993/6/9");            // 徳仁親王の結婚の儀
38var cstSokuireiseiden = new Date("1990/11/12");          // 即位礼正殿の儀
39var cstImplementHoliday = new Date("1973/4/12");        // 振替休日施行
40
41// [prmDate]には "yyyy/m/d"形式の日付文字列を渡す
42function ktHolidayName(prmDate)
43{
44  var MyDate = new Date(prmDate);
45  var HolidayName = prvHolidayChk(MyDate);
46  var YesterDay;
47  var HolidayName_ret;
48
49  if (HolidayName == "") {
50      if (MyDate.getDay() == MONDAY) {
51          // 月曜以外は振替休日判定不要
52          // 5/6(火,水)の判定はprvHolidayChkで処理済
53          // 5/6(月)はここで判定する
54          if (MyDate.getTime() >= cstImplementHoliday.getTime()) {
55              YesterDay = new Date(MyDate.getFullYear(),
56                                    MyDate.getMonth(),(MyDate.getDate()-1));
57              HolidayName = prvHolidayChk(YesterDay);
58              if (HolidayName != "") {
59                  HolidayName_ret = "振替休日";
60              } else {
61                  HolidayName_ret = "";
62              }
63          } else {
64              HolidayName_ret = "";
65          }
66      } else {
67          HolidayName_ret = "";
68      }
69  } else {
70      HolidayName_ret = HolidayName;
71  }
72
73  return HolidayName_ret;
74}
75
76//===============================================================
77
78function prvHolidayChk(MyDate)
79{
80  var MyYear = MyDate.getFullYear();
81  var MyMonth = MyDate.getMonth() + 1;    // MyMonth:1~12
82  var MyDay = MyDate.getDate();
83  var NumberOfWeek;
84  var MyAutumnEquinox;
85
86  var Result = "";
87
88  if (MyDate.getTime() < cstImplementTheLawOfHoliday.getTime()) {
89    return ""; // 祝日法施行(1948/7/20)以前
90  } else;
91
92  switch (MyMonth) {
93// 1月 //
94 /* case 1:
95      if (MyDay == 1) {
96          Result = "元日";
97      } else {
98          if (MyYear >= 2000) {
99              NumberOfWeek = Math.floor((MyDay - 1) / 7) + 1;
100              if ((NumberOfWeek == 2) && (MyDate.getDay() == MONDAY)) {
101                  Result = "成人の日";
102              } else;
103          } else {
104              if (MyDay == 15) {
105                  Result = "成人の日";
106              } else;
107          }
108      }
109      break;*/
110// 2月 //
111 /* case 2:
112      if (MyDay == 11) {
113          if (MyYear >= 1967) {
114              Result = "建国記念の日";
115          } else;
116      } else {
117          if (MyDate.getTime() == cstShowaTaiso.getTime()) {
118              Result = "昭和天皇の大喪の礼";
119          } else;
120      }
121      break;*/
122// 3月 //
123 /* case 3:
124      if (MyDay == prvDayOfSpringEquinox(MyYear)) {  // 1948~2150以外は[99]
125          Result = "春分の日";                      // が返るので、必ず≠になる
126      } else;
127      break;*/
128// 4月 //
129
130// 5月 //
131 
132// 6月 //
133  case 6:
134      if (MyDate.getTime() == cstNorihitoKekkon.getTime()) {
135          Result = "皇太子徳仁親王の結婚の儀";
136      } else;
137      break;
138// 7月 //
139 /* case 7:
140      if (MyYear >= 2003) {
141          NumberOfWeek = Math.floor((MyDay - 1) / 7) + 1;
142          if ((NumberOfWeek == 3) && (MyDate.getDay() == MONDAY)) {
143              Result = "海の日";
144          } else;
145      } else {
146          if (MyYear >= 1996) {
147              if (MyDay == 23) {
148                  Result = "海の日";
149              } else;
150          } else;
151      }
152      break;*/
153// 8月 //
154//  case 8:
155//      if (MyDay == 10) {
156//          if (MyYear >= 2016) {
157//              Result = "山の日";
158//          } else;
159//      } else;
160//      break;
161// 9月 //
162//  case 9:
163      //第3月曜日(15~21)と秋分日(22~24)が重なる事はない
164    //  MyAutumnEquinox = prvDayOfAutumnEquinox(MyYear);
165     // if (MyDay == MyAutumnEquinox) {    // 1948~2150以外は[99]
166     //     Result = "秋分の日";          // が返るので、必ず≠になる
167    //  } else {
168        //  if (MyYear >= 2003) {
169          //    NumberOfWeek = Math.floor((MyDay - 1) / 7) + 1;
170           //   if ((NumberOfWeek == 3) && (MyDate.getDay() == MONDAY)) {
171             //     Result = "敬老の日";
172           //   } else {
173           //       if (MyDate.getDay() == TUESDAY) {
174             //         if (MyDay == (MyAutumnEquinox - 1)) {
175                  //        Result = "国民の休日";
176               //       } else;
177             //     } else;
178           //   }
179       //   } else {
180        //      if (MyYear >= 1966) {
181              //    if (MyDay == 15) {
182                   //   Result = "敬老の日";
183            //      } else;
184           //   } else;
185       //   }
186    //  }
187    //  break;
188// 10月 //
189/*  case 10:
190      if (MyYear >= 2000) {
191          NumberOfWeek = Math.floor(( MyDay - 1) / 7) + 1;
192          if ((NumberOfWeek == 2) && (MyDate.getDay() == MONDAY)) {
193              Result = "体育の日";
194          } else;
195      } else {
196          if (MyYear >= 1966) {
197              if (MyDay == 10) {
198                  Result = "体育の日";
199              } else;
200          } else;
201      }
202      break;*/
203// 11月 //
204 /* case 11:
205      if (MyDay == 3) {
206          Result = "文化の日";
207      } else {
208       //   if (MyDay == 23) {
209         //     Result = "勤労感謝の日";
210      //    } else {
211              if (MyDate.getTime() == cstSokuireiseiden.getTime()) {
212                  Result = "即位礼正殿の儀";
213              } else;
214          }
215   //   }
216      break;*/
217// 12月 司牡丹休みでないため除外//
218//  case 12:
219//      if (MyDay == 23) {
220//          if (MyYear >= 1989) {
221//              Result = "天皇誕生日";
222//          } else;
223//      } else;
224//      break;
225  }
226
227  return Result;
228}
229
230//===================================================================
231// 春分/秋分日の略算式は
232// 『海上保安庁水路部 暦計算研究会編 新こよみ便利帳』
233// で紹介されている式です。
234function prvDayOfSpringEquinox(MyYear)
235{
236  var SpringEquinox_ret;
237
238  if (MyYear <= 1947) {
239      SpringEquinox_ret = 99;    //祝日法施行前
240  } else {
241      if (MyYear <= 1979) {
242          // Math.floor 関数は[VBAのInt関数]に相当
243          SpringEquinox_ret = Math.floor(20.8357 +
244            (0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
245      } else {
246          if (MyYear <= 2099) {
247              SpringEquinox_ret = Math.floor(20.8431 +
248                (0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
249          } else {
250              if (MyYear <= 2150) {
251                  SpringEquinox_ret = Math.floor(21.851 +
252                    (0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
253              } else {
254                  SpringEquinox_ret = 99;    //2151年以降は略算式が無いので不明
255              }
256          }
257      }
258  }
259  return SpringEquinox_ret;
260}
261
262//=====================================================================
263function prvDayOfAutumnEquinox(MyYear)
264{
265  var AutumnEquinox_ret;
266
267  if (MyYear <= 1947) {
268      AutumnEquinox_ret = 99; //祝日法施行前
269  } else {
270      if (MyYear <= 1979) {
271          // Math.floor 関数は[VBAのInt関数]に相当
272          AutumnEquinox_ret = Math.floor(23.2588 +
273            (0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
274      } else {
275          if (MyYear <= 2099) {
276              AutumnEquinox_ret = Math.floor(23.2488 +
277                (0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
278          } else {
279              if (MyYear <= 2150) {
280                  AutumnEquinox_ret = Math.floor(24.2488 +
281                    (0.242194 * (MyYear - 1980)) - Math.floor((MyYear - 1980) / 4));
282              } else {
283                  AutumnEquinox_ret = 99;    //2151年以降は略算式が無いので不明
284              }
285          }
286      }
287  }
288  return AutumnEquinox_ret;
289}
290
291//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
292//_/ CopyRight(C) K.Tsunoda(AddinBox) 2001 All Rights Reserved.
293//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
294
295//-->
295// JavaScript Document

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.