うるう年チェック
function isLeapYear(_year) {
if (_year.length == 0 || isNaN(_year) ) {
return false;
}
var year = parseInt(_year, 10);
if (year % 400 == 0) {
return true;
}
if (year % 4 == 0 && year % 100 != 0) {
return true;
}
}
日付チェック
方法(1)
うるう年を考慮した上で、月数、日数の妥当性をチェックします。
うるう年チェックには、上記isLeapYear関数を使います。
function checkDate(_year, _month, _day) {
//全て空白の場合
if (_year.length == 0 && _month.length == 0 && _day.length == 0) {
return true;
}
if (_year.length == 0 || _month.length == 0 || _day.length == 0) {
return false;
}
if (isNaN(_year) || isNaN(_month) || isNaN(_day)) {
return false;
}
var year = parseInt(_year, 10);
var month = parseInt(_month, 10);
if (year < 0 || 9999 < year) {
return false;
}
if (month < 1 || 12 < month) {
return false;
}
var day = parseInt(_day, 10);
var daysArray = new Array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
var endDay = daysArray[month - 1];
//うるう年の調整
if (month == 2 && isLeapYear(year)) {
endDay = endDay + 1;
}
if (day < 1 || endDay < day) {
return false;
}
return true;
}
方法(2)
Dateオブジェクトが、引数に不正な値を与えられた場合、自動的に適正な値に調整する機能を利用します。
function checkDate(strYear, strMonth, strDay) {
if (strYear.length == 0 && strMonth.length == 0 && strDay.length == 0) {
return true; //全スペースはOK
}
if (strYear.length == 0 || strMonth.length == 0 || strDay.length == 0) {
return false;
}
if (isNaN(strYear) || isNaN(strMonth) || isNaN(strDay)) {
return false;
}
var tmpDat = new Date(strYear, strMonth-1, strDay);
if (strYear != tmpDat.getFullYear() || (strMonth - 1) != tmpDat.getMonth()
|| strDay != tmpDat.getDate()) {
return false;
} else {
return true;
}
}
休日チェック
引数に指定された日が、日本の休日か否かをチェックします。
但し、春分・秋分の判定計算の有効期間が1980-2099までとなっており、
月曜休日が施行されたのは2000年からなので、この関数の有効期間は2000-2099となります。
function isHoliday(year, month, day) {
var i;
//日の決まった祝日
holiday1 = new Array("1/1", "2/11", "4/29", "5/3", "5/4", "5/5", "11/3",
"11/23", "12/23");
md = month + "/" + day;
for (i=0; i