[JavaScript] 윤년 체크하기, 윤달~

윤년

윤년 윤달

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자리를 입력해 주세요.";
    }
}

댓글