Reserve」を開発した際に、施設と利用日を選択した段階で、平日と土日祝で異なる料金を自動表示させる機能をつける必要がありました。祝日は何かしらの処理をつくって判定する必要があります。最終的に土日祝の判定をできる様になったのですが、結構大変だったので、そもそも祝日っていつ?というところから、どんなファイルになったかをシェアします。祝日判定は来年分までしかできない日本の祝日は、毎年2月に翌年の祝日が発表されています。API」や「国民の祝日」などの、祝日を返すAPIも、来年の祝日までしか判定できません。予約システム等で、2年先や3年先など、祝日が公表されていない期間も祝日判定がしたい場合に、どうにかする必要があります。祝日について調べてみた祝日は、2023年4月現在、下記の5種類あるようです。※もっと詳しく知りたい方は、内閣府ホームページの「国民の祝日」についてをご確認ください。国民の休日...二つの祝日に挟まれた平日2年以上先の祝日判定をするには、日付固定と◯月第◯曜日はjsonファイルで、それ以外はjQueryで算出すれば、いけそう。振替休日は、振替休日になる部分が祝日の場合は一番近い平日となるようなのですが、今回は簡易版として、日曜日が祝日の場合の月曜日が祝日となるようにします。「国民の休日」は「敬老の日」と「秋分の日」の日付で稀に発生するようです。前回は2015年の9月22日がそれに該当するとのこと。チェックしたい日の前後が祝日かどうか調べればこちらもいけそうです。そんな感じで、作ってみます。今回は下記の様なファイル構成で、index.htmlに入力した日付が土日祝日かどうか判定するものを作成してみます。判定する用のjsファイルを仮作成チェックに使用する関数のベースを作成します。これに書き加えて、APIを使った祝日判定と、APIが無い期間は自作したファイルから判定する記述を追記していきます。js/check.jsこの段階では、土日のみ判定できます。jQueryで祝日ファイルを読み込む公表されている部分に関しては、内閣府が出しているCSVファイルか、素敵な方々が作成してくださっているAPIを利用します。今回は、「国民の祝日」のAPIを利用する想定で進めていきます。js/holiday.js国民の祝日APIを読み込みます。Holidaysで「2024-01-01」など日付だけ確認できるデータを返す様にしています。js/check.js判定する用のjsファイルの一行目に、作成したjsファイルをインポートしておきます。チェックしたい日が2年以内ならAPI使用」を探しその下に下記追加します。APIでとってきた配列中にチェックしたい日付と合致するものがあれば合致する配列番号を返す$.inArrayを使って判定します。(無い場合は-1を返す)これで、APIがある場合は祝日判定ができます。祝日を作る日付固定はそのまま入力すれば良いとして、1月の第2月曜日など用に自分がわかるルールを作っておきます。w(曜日判定する識別子)2(何週目か数字)1(曜日)というルールで作成しています。最後の曜日に使用している数字はjQueryのgetDay()で曜日をチェックした時に返される値の、0=日曜日、1=月曜日...を使用しています。json/tentative.json後で「やっぱり何の日かも知りたい」となった時用に、日付と何の日かを記載したjsonファイルにしました。}}js/tentative.js自作jsonの方も、API同様に日付だけ返す様にしておきます。Holidays;js/check.js祝日APIの読み込み同様、2行目に作成したjsファイルをインポートしておきます。"./tentative.js";◯月第◯曜日のような祝日用に、指定した日がその月の何回目の曜日か調べる用の関数を作ります。指定した日と同月で同じ曜日の日を取得します。days;}作成した関数を使って、さらに指定日が何週目であるか調べる関数を作成します。チェックしたい日が2年以上先なら自作データにて判定」を探しその下に下記追加します。チェックはAPI同様に$.inArrayを用いてチェックします。checkTentativeResult;ここまでで、2年以上先の固定日と◯月第◯曜日タイプの祝日判定ができる様になりました。春分の日と秋分の日は計算式で算出します。計算式の理由は説明できませんが、ありがたくそのまま使用させてもらいます。自作チェックの結果」の前の行あたりに下記を追加します。}}春分の日は3月の19~21日、秋分の日は9月の22〜24日とのことなので、振替休日があった場合の1日分をプラスして、チェックしたい月が3月で日付が19〜22日の場合は春分の日のチェックを、9月で22〜25日の場合は秋分の日チェックをし、春分の日や秋分の日が日曜日ならその翌日は振替休日なので祝日となる様にしています。次項目の国民の休日判定等に使用するため、春分の日・秋分の日をそれぞれ何日か保存しておきます。振替休日か国民の休日か判定チェックしたい日の前日が日曜日で祝日の場合は振替休日になります。国民の休日は、祝日と祝日の間の平日が祝日となります。これをチェックするために、まずは、チェックしたい日の前後の日付を取得します。自作チェックの結果」の前の行あたりに下記を追加します。`${afterMonth}-w${afterWeekCheck}${afterWeek}`;まずは振替休日から判定できるようにします。js/check.js続いて下記を追加します。春分の日・秋分の日は前項目でチェックしているので、こちらでは自作祝日jsonの中にある祝日と一致するかチェックします。これまでの祝日判定同様、チェックしたい日の前日が祝日か$.inArrayで確認します。今回は簡易的に、チェックしたい日が月曜日で前日が祝日の場合は、祝日判定となる様にします。true;}js/check.js続いて国民の休日をチェックします。こちらがあり得るパターンとしては、9月の敬老の日と秋分の日で発生することがあるようですので、下記の様にチェックしています。日付を入力してボタンを押すと、下に平日か土日祝か表示されるようにします。