PageSourceSearch

https://eguchi-dental.jp/yoyaku/UTF8/form_js/HolidayChk.js

js eguchi-dental.jp collected 2026-10-05 11:04:06 UTC 11,736 bytes, 357 lines download raw bytes

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

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.