2007年以降の日本の国民の祝日を判定する関数を作りました。その日が祝日であればその名称、祝日でなければ空文字を返します。
2016年から実施の「山の日」にも対応しています。
2019年2月22日追記
2019年対応、2020年対応について反映しました。
2020年12月31日追記
2021年対応について反映しました。
function getNationalHoliday(dateobj) {
//祝日を判定する関数。
//祝日ならばその名称、祝日でなければ空文字を返す。
//20140808 公開。
//20190221 修正。2019年対応(天皇の即位の日等)を反映。
//20190221 修正。2020年対応(スポーツの日等)を反映。
//20201229 修正。2021年対応(海の日、スポーツの日、山の日)を反映。
var nen, tsuki, hi, yobi;
if(dateobj.getFullYear() < 2007) {
throw new Error("2007年以上にしてください。");
}
nen = dateobj.getFullYear();
tsuki = dateobj.getMonth() + 1;
hi = dateobj.getDate();
yobi = dateobj.getDay();
//2019年限定
if( nen == 2019 && tsuki == 5 && hi == 1 ){
return "天皇の即位の日";
}else if(nen == 2019 && tsuki == 10 && hi== 22 ){
return "即位礼正殿の儀の行われる日";
//2020年限定
}else if(nen == 2020 && tsuki == 7 && hi== 23 ){
return "海の日";
}else if(nen == 2020 && tsuki == 7 && hi== 24 ){
return "スポーツの日";
}else if(nen == 2020 && tsuki == 8 && hi== 10 ){
return "山の日";
//2021年限定
}else if(nen == 2021 && tsuki == 7 && hi== 22 ){
return "海の日";
}else if(nen == 2021 && tsuki == 7 && hi== 23 ){
return "スポーツの日";
}else if(nen == 2021 && tsuki == 8 && hi== 8 ){
return "山の日";
//一般
}else if(tsuki == 1 && hi == 1) {
return "元日";
}else if(tsuki == 2 && hi == 11) {
return "建国記念の日";
}else if(tsuki == 4 && hi == 29) {
return "昭和の日";
}else if(tsuki == 5 && hi == 3) {
return "憲法記念日";
}else if(tsuki == 5 && hi == 4) {
return "みどりの日";
}else if(tsuki == 5 && hi == 5) {
return "こどもの日";
}else if(nen >= 2016 && nen != 2020 && nen != 2021 && tsuki == 8 && hi == 11) {
return "山の日"; //2016年から。2020年と2021年だけ別。
}else if(tsuki == 11 && hi == 3) {
return "文化の日";
}else if(tsuki == 11 && hi == 23) {
return "勤労感謝の日";
}else if(nen<=2018 && tsuki == 12 && hi == 23) {
return "天皇誕生日";//2018年まで。2020年は天皇の即位の日。
}else if(nen >= 2020 && tsuki == 2 && hi == 23) {
return "天皇誕生日";//2020年から。
}else if(tsuki == 1 && yobi == 1 && 7 < hi && hi < 15) {
return "成人の日"; //1月第2月曜日。
}else if(nen != 2020 && nen != 2021 && tsuki == 7 && yobi == 1 && 14 < hi && hi < 22) {
return "海の日"; //7月第3月曜日。2020年と2021年だけ別。
}else if(tsuki == 9 && yobi == 1 && 14 < hi && hi < 22) {
return "敬老の日"; //9月第3月曜日。
}else if(nen<=2019 && tsuki == 10 && yobi == 1 && 7 < hi && hi < 15) {
return "体育の日"; //10月第2月曜日。2019年まで。
}else if(nen >=2022 && tsuki == 10 && yobi == 1 && 7 < hi && hi < 15) {
return "スポーツの日"; //10月第2月曜日。2022年から。2020年と2021年だけ別。
}else if(tsuki == 3 && hi == shunbun(nen)) {
return "春分の日";
}else if(tsuki == 9 && hi == shubun(nen)) {
return "秋分の日";
}else{
return "";
}
}
//祝日を判定する関数。
//祝日ならばその名称、祝日でなければ空文字を返す。
//20140808 公開。
//20190221 修正。2019年対応(天皇の即位の日等)を反映。
//20190221 修正。2020年対応(スポーツの日等)を反映。
//20201229 修正。2021年対応(海の日、スポーツの日、山の日)を反映。
var nen, tsuki, hi, yobi;
if(dateobj.getFullYear() < 2007) {
throw new Error("2007年以上にしてください。");
}
nen = dateobj.getFullYear();
tsuki = dateobj.getMonth() + 1;
hi = dateobj.getDate();
yobi = dateobj.getDay();
//2019年限定
if( nen == 2019 && tsuki == 5 && hi == 1 ){
return "天皇の即位の日";
}else if(nen == 2019 && tsuki == 10 && hi== 22 ){
return "即位礼正殿の儀の行われる日";
//2020年限定
}else if(nen == 2020 && tsuki == 7 && hi== 23 ){
return "海の日";
}else if(nen == 2020 && tsuki == 7 && hi== 24 ){
return "スポーツの日";
}else if(nen == 2020 && tsuki == 8 && hi== 10 ){
return "山の日";
//2021年限定
}else if(nen == 2021 && tsuki == 7 && hi== 22 ){
return "海の日";
}else if(nen == 2021 && tsuki == 7 && hi== 23 ){
return "スポーツの日";
}else if(nen == 2021 && tsuki == 8 && hi== 8 ){
return "山の日";
//一般
}else if(tsuki == 1 && hi == 1) {
return "元日";
}else if(tsuki == 2 && hi == 11) {
return "建国記念の日";
}else if(tsuki == 4 && hi == 29) {
return "昭和の日";
}else if(tsuki == 5 && hi == 3) {
return "憲法記念日";
}else if(tsuki == 5 && hi == 4) {
return "みどりの日";
}else if(tsuki == 5 && hi == 5) {
return "こどもの日";
}else if(nen >= 2016 && nen != 2020 && nen != 2021 && tsuki == 8 && hi == 11) {
return "山の日"; //2016年から。2020年と2021年だけ別。
}else if(tsuki == 11 && hi == 3) {
return "文化の日";
}else if(tsuki == 11 && hi == 23) {
return "勤労感謝の日";
}else if(nen<=2018 && tsuki == 12 && hi == 23) {
return "天皇誕生日";//2018年まで。2020年は天皇の即位の日。
}else if(nen >= 2020 && tsuki == 2 && hi == 23) {
return "天皇誕生日";//2020年から。
}else if(tsuki == 1 && yobi == 1 && 7 < hi && hi < 15) {
return "成人の日"; //1月第2月曜日。
}else if(nen != 2020 && nen != 2021 && tsuki == 7 && yobi == 1 && 14 < hi && hi < 22) {
return "海の日"; //7月第3月曜日。2020年と2021年だけ別。
}else if(tsuki == 9 && yobi == 1 && 14 < hi && hi < 22) {
return "敬老の日"; //9月第3月曜日。
}else if(nen<=2019 && tsuki == 10 && yobi == 1 && 7 < hi && hi < 15) {
return "体育の日"; //10月第2月曜日。2019年まで。
}else if(nen >=2022 && tsuki == 10 && yobi == 1 && 7 < hi && hi < 15) {
return "スポーツの日"; //10月第2月曜日。2022年から。2020年と2021年だけ別。
}else if(tsuki == 3 && hi == shunbun(nen)) {
return "春分の日";
}else if(tsuki == 9 && hi == shubun(nen)) {
return "秋分の日";
}else{
return "";
}
}
春分の日と秋分の日はちょっと計算が複雑なので別にしました。
function shunbun(nen) {//春分の日
if(nen < 1900 || nen > 2099) {
return 0;
}
if(nen % 4 === 0) {
return nen <= 1956 ? 21 : (nen <= 2088 ? 20 : 19);
} else if(nen % 4 == 1) {
return nen <= 1989 ? 21 : 20;
} else if(nen % 4 == 2) {
return nen <= 2022 ? 21 : 20;
} else {
return nen <= 1923 ? 22 : (nen <= 2055 ? 21 : 20);
}
}
if(nen < 1900 || nen > 2099) {
return 0;
}
if(nen % 4 === 0) {
return nen <= 1956 ? 21 : (nen <= 2088 ? 20 : 19);
} else if(nen % 4 == 1) {
return nen <= 1989 ? 21 : 20;
} else if(nen % 4 == 2) {
return nen <= 2022 ? 21 : 20;
} else {
return nen <= 1923 ? 22 : (nen <= 2055 ? 21 : 20);
}
}
function shubun(nen) {//秋分の日
if(nen < 1900 || nen > 2099) {
return 0;
}
if(nen % 4 === 0) {
return nen <= 2008 ? 23 : 22;
} else if(nen % 4 == 1) {
return nen <= 1917 ? 24 : (nen <= 2041 ? 23 : 22);
} else if(nen % 4 == 2) {
return nen <= 1946 ? 24 : (nen <= 2074 ? 23 : 22);
} else {
return nen <= 1979 ? 24 : 23;
}
}
if(nen < 1900 || nen > 2099) {
return 0;
}
if(nen % 4 === 0) {
return nen <= 2008 ? 23 : 22;
} else if(nen % 4 == 1) {
return nen <= 1917 ? 24 : (nen <= 2041 ? 23 : 22);
} else if(nen % 4 == 2) {
return nen <= 1946 ? 24 : (nen <= 2074 ? 23 : 22);
} else {
return nen <= 1979 ? 24 : 23;
}
}
コメント