자바스크립트에서 날짜(Date) 객체가 유효한지 확인하는 가장 일반적인 방법은 isNaN() 함수를 활용하는 것입니다. 존재하지 않거나 형식이 잘못된 날짜 문자열로 Date 객체를 생성하면 해당 객체는 Invalid Date 상태가 되며, 이때 getMonth(), getTime() 같은 날짜 메서드의 반환값은 NaN이 됩니다. 이 특성을 역으로 이용하면 날짜의 유효 여부를 손쉽게 판별할 수 있습니다.
예제: isNaN()으로 날짜 유효성 검사하기
아래 코드를 실행해 날짜 유효성 검사를 직접 확인해 볼 수 있습니다.
<!DOCTYPE html>
<html>
<body>
<script>
var date1, date2;
// 올바른 날짜 형식
date1 = new Date("2018/1/1");
if (!isNaN(date1.getMonth())) {
document.write("Valid date1: " + date1);
} else {
document.write("<br>Invalid date1");
}
// 잘못된 날짜 형식
date2 = new Date("20181/1");
if (!isNaN(date2.getMonth())) {
document.write("<br>Valid date2: " + date2);
} else {
document.write("<br>Invalid date2");
}
</script>
</body>
</html>
출력 결과
Valid date1: Mon Jan 01 2018 00:00:00 GMT+0530 (India Standard Time) Valid date2: Mon Jan 01 20181 00:00:00 GMT+0530 (India Standard Time)
주의 사항: 브라우저마다 파싱 결과가 다를 수 있습니다
위 출력 결과에서 두 번째 날짜("20181/1")도 유효한 것으로 표시되었는데, 이는 자바스크립트의 날짜 문자열 파싱 동작이 브라우저나 실행 환경에 따라 달라질 수 있기 때문입니다. 즉, 어떤 환경에서는 같은 문자열이 Invalid Date로 처리될 수도 있습니다. 따라서 실무에서는 보다 엄격하고 일관된 검사 방식을 사용하는 것이 좋습니다.
더 안정적인 방법: getTime() 활용하기
getTime() 메서드는 1970년 1월 1일 00:00:00 UTC부터 경과한 밀리초를 반환하며, 유효하지 않은 날짜에서는 항상 NaN을 반환합니다. 이를 활용하면 다음과 같이 재사용 가능한 유효성 검사 함수를 만들 수 있습니다.
function isValidDate(value) {
return value instanceof Date && !isNaN(value.getTime());
}
console.log(isValidDate(new Date("2018/1/1"))); // true
console.log(isValidDate(new Date("invalid"))); // false
console.log(isValidDate("2018/1/1")); // false (Date 객체가 아님)
instanceof Date 조건을 함께 사용하면 전달된 값이 실제 Date 객체인지까지 확인할 수 있으므로, 문자열이나 숫자 등 다른 타입의 값이 들어오는 경우에도 안전하게 대응할 수 있습니다. 간단한 검사에는 isNaN(date.getMonth()) 방식으로 충분하지만, 신뢰성 높은 코드를 위해서는 getTime() 기반의 검증 방식을 사용하는 것을 권장합니다.