윤년
1년은 365일로 약속을 하였으나, 달력의 계산에는 오차가 있을 수밖에 없습니다. 이러한 역법의 오차를 보정하기 위해 사용하는 한 가지 방법이 윤년을 체크하는 것입니다. 보통은 2월이 28일까지 있는데, 윤년 또는 윤달이 있는 경우에 2월 29일까지 발생하는 이유가 이 때문입니다.
윤년 체크하기
해당하는 연도가 윤년 또는 윤달인지 여부를 확인하는 방법은 다음과 같으며 하나라도 조건을 만족하면 됩니다.
- 해당연도가 4로 나누어 떨어지면서, 100으로 나누어 떨어지지는 않는 경우
- 해당연도가 400으로 나누어 떨어지는 경우
if( (year % 4 == 0 && year % 100 != 0) || year % 400 == 0 ) {
//todo
}
윤년, 윤달을 가정한 생년월일 체크 예시
birth는 생년월일 8자리 매개변수이고, getDate는 현재 일자 매개변수입니다.
function validateBirth(birth, getDate) {
var year = parseInt(birth.substr(0, 4));
var month = parseInt(birth.substr(4, 2));
var day = parseInt(birth.substr(6, 2));
var getYear = getDate.getFullYear();
var getMonth = getDate.getMonth() + 1;
var getDay = getDate.getDate();
if (birth.length == 8) {
if (month < 1 || month > 12) {
return "생월을 확인해 주세요. 1~12월 사이여야 합니다. " + month;
} else if (day < 1 || day > 31) {
return "생일을 확인해 주세요. 1~31일 사이여야 합니다. " + day;
} else if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31) {
return "생월을 확인해 주세요. 해당 월은 31일이 없습니다.";
} else if (month == 2) {
if (day > 29) {
return "생일을 확인해 주세요. 2월 29일을 초과하였습니다.";
} else if (day == 29) {
var isLeapYear = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
if (isLeapYear) {
return "Y";
} else {
return "생일을 확인해 주세요. 해당 연도는 2월 29일이 없습니다.";
}
} else {
return "Y";
}
} else {
return "Y";
}
}
else {
return "생년월일 8자리를 입력해 주세요.";
}
}