Skip to content

Instantly share code, notes, and snippets.

@taznica
Created October 24, 2017 14:35
Show Gist options
  • Save taznica/98ac6b2f402a67a52536ca2c0f38de04 to your computer and use it in GitHub Desktop.
Save taznica/98ac6b2f402a67a52536ca2c0f38de04 to your computer and use it in GitHub Desktop.
//
// var date = new Date();
//
// var year = date.getFullYear();
// var month = date.getMonth() + 1;
// var day = date.getDate();
// var dayOfWeek = date.getDay(); // Sunday -> 0
//
// 休日の判定
function isHoliday(year, month, day) {
return(isWeekend(year, month, day) || isNationalHoliday(year, month, day) || isSpecialHoliday(year, month, day));
}
// 祝日の判定
function isNationalHoliday(year, month, day) {
return isFixedHoliday(year, month, day) || isHappyMonday(year, month, day) || isEquinoxDay(year, month, day);
}
// 特別な休日の判定
function isSpecialHoliday(year, month, day) {
return isHurikaeDay(year, month, day) || isBetweenHolidays(year, month, day);
}
// 土日判定
function isWeekend(year, month, day) {
var dayOfWeek = new Date(year, month-1, day).getDay(); // 曜日
if(dayOfWeek == 0 || dayOfWeek == 6) {
return true;
}
else {
return false;
}
}
// 毎年同じ日付の祝日
function isFixedHoliday(year, month, day) {
if(
month == 1 && day == 1 // 元日
|| month == 2 && day == 11 // 建国記念日
|| month == 4 && day == 29 // 昭和の日
|| month == 5 && day == 3 // 憲法記念日
|| month == 5 && day == 4 // みどりの日
|| month == 5 && day == 5 // こどもの日
|| month == 8 && day == 11 // 山の日
|| month == 11 && day == 3 // 文化の日
|| month == 11 && day == 23 // 勤労感謝の日
|| month == 12 && day == 23 // 天皇誕生日
) {
return true;
}
}
// ○月の第△月曜日(ハッピーマンデー)
function isHappyMonday(year, month, day) {
var dayOfWeek = new Date(year, month-1, day).getDay(); // □曜日
var numberOfWeek = Math.floor((day - dayOfWeek + 12) / 7); // 第△週目
if(
(month == 1 && numberOfWeek == 2 && dayOfWeek == 1) // 成人の日(1月第2月曜日)
|| (month == 7 && numberOfWeek == 3 && dayOfWeek == 1) // 海の日(7月第3月曜日)
|| (month == 9 && numberOfWeek == 3 && dayOfWeek == 1) // 敬老の日(9月第3月曜日)
|| (month == 10 && numberOfWeek == 2 && dayOfWeek == 1) // 体育の日(10月第2月曜日)
) {
return true;
}
}
// 春分・秋分の日
function isEquinoxDay(year, month, day) {
if (
(month == 3 && day == Math.floor(20.8431 + 0.242194 * ( year - 1980)) - Math.floor((year - 1980)/4))
|| (month == 9 && day == Math.floor(23.2488 + 0.242194 * ( year - 1980)) - Math.floor((year - 1980)/4))
) {
return true;
}
return false;
}
// 振替休日(日曜日が国民の祝日であればその後最も近い平日も休日)
function isHurikaeDay(year, month, day) {
var dayOfWeek = new Date(year, month-1, day).getDay(); // 曜日
// 土日であれば振替休日ではない
if(dayOfWeek == 0 || dayOfWeek == 6) {
return false;
}
while(true) {
if(!isNationalHoliday(year, month, day-dayOfWeek)) {
return false;
break;
}
if(dayOfWeek-1 == 0) {
return true;
break;
}
dayOfWeek = dayOfWeek - 1;
}
}
// 国民の休日(国民の祝日に挟まれた平日)
function isBetweenHolidays(year, month, day) {
var dayOfWeek = new Date(year, month-1, day).getDay(); // 曜日
// 前日及び翌日が国民の祝日である平日は休日
if(dayOfWeek != 0 && dayOfWeek != 6) {
return isNationalHoliday(year, month, day-1) && isNationalHoliday(year, month, day+1);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment