/// 休日の判定(振替休日を考慮)
function getHoliday_ja_JP( date ) {
/// 前日の状態を調べる
function checkBeforeDay( date ) {
var yesterday = new Date();
yesterday.setTime( date.getTime() - 24 * 60 * 60 * 1000 );
var week = yesterday.getDay();
// 前日が祝日の場合、振替休日である可能性がある
if( getPureHoliday_ja_JP( yesterday ) != null ) {
// 祝日が日曜日なので
if( week == 0 ) return '振替休日';
return checkBeforeDay( yesterday );
}
return null;
}
var week = date.getDay();
var holiday = getPureHoliday_ja_JP( date );
if( holiday != null ) return holiday;
if( week == 0 ) return null;
var year = date.getFullYear();
if( year >= 1973 ) {
var holiday = checkBeforeDay( date );
if( holiday != null ) return holiday;
if( year >= 2003 && date.getMonth() == 8 ) {
var yesterday = new Date();
yesterday.setTime( date.getTime() - 24 * 60 * 60 * 1000 );
// 注:敬老の日は、月曜日固定
if( getPureHoliday_ja_JP( yesterday ) == '敬老の日' ) {
var tommorow = new Date();
tommorow.setTime( date.getTime() + 24 * 60 * 60 * 1000 );
if( getPureHoliday_ja_JP( tommorow ) == '秋分の日' ) {
return '国民の祝日';
}
}
}
}
return null;
}
/// 祝日の判定(振替休日を考慮しない)
function getPureHoliday_ja_JP( date ) {
var week = date.getDay();
var year = date.getFullYear();
var day = date.getDate();
switch( date.getMonth() ) {
case 0:
// 元旦
if( day == 1 ) return '元旦';
// 成人の日
if( year >= 2000 ) {
if( week == 1 && 7 < day && day < 15 ) return '成人の日';
} else if( day == 15 ) { return '成人の日'; }
break;
case 1:
// 建国記念日
if( year >= 1967 ) {
if( day == 11 ) return '建国記念日';
}
break;
case 2:
// 春分の日 正確には観測による。下記式は 1980年から2099年の間有効
if( day == (
Math.floor( 20.8431+.242194 * (year -1980.0))
- Math.floor( (year - 1980.0) / 4.0 )
) ) return '春分の日';
break;
case 3:
if( day == 29 ) {
if( year <= 1988 ) return '天皇誕生日';
if( year <= 2006 ) return 'みどりの日';
return '昭和の日';
}
break;
case 4:
if( day == 3 ) return '憲法記念日';
if( day == 5 ) return 'こどもの日';
if( day == 4 ) {
if( year < 1988 ) return null;
if( year <= 2006 ) {
if( week == 0 ) return null;
if( week == 1 ) return null; // 振替休日は祝日としない
return '国民の祝日';
}
//if( year >= 2007 )
return 'みどりの日';
}
break;
case 5:
// for (;_;) oh;
break;
case 6:
// 海の日
if( year >= 2003 ) {
if( week == 1 && 14 < day && day < 22 ) return '海の日';
} else if( day == 20 && year >= 1996) { return '海の日'; }
break;
case 7:
// 盆休み(不定)
break;
case 8:
// 敬老の日
if( year >= 2003 ) {
if( week == 1 && 14 < day && day < 22 ) return '敬老の日';
} else if( day == 15 && year >= 1966 ) { return '敬老の日'; }
// 秋分の日 正確には観測による。下記式は 1980年から2099年の間有効
if( day == (
Math.floor( 23.2488+.242194 * (year -1980.0))
- Math.floor( (year - 1980.0) / 4.0 )
) ) return '秋分の日';
break;
case 9:
// 体育の日
if( year >= 2000 ) {
if( week == 1 && 7 < day && day < 15 ) return '体育の日';
} else if( day == 10 && year >= 1966 ) { return '体育の日'; }
break;
case 10:
// 文化の日・勤労感謝の日
if( day == 3 ) return '文化の日';
if( day == 23 ) return '勤労感謝の日';
break;
case 11:
// 天皇誕生日
if( day == 23 && year >= 1989 ) return '天皇誕生日';
break;
default:
}
return null;
}
2009年2月10日火曜日
JavaScript 祝日計算
ネタに走る…(^^;
登録:
コメントの投稿 (Atom)
0 件のコメント:
コメントを投稿