Created
October 24, 2017 14:35
-
-
Save taznica/98ac6b2f402a67a52536ca2c0f38de04 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// | |
// 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