본문 바로가기
Javascript

자바스크립트 "YYYY-MM-DD" 형식의 문자 날짜 체크

by Dokon Jang 2023. 8. 29.
반응형

자바스크립트로 날짜 정확한 날짜를 체크하는 것이 약간 애매합니다.
Date.parse를 사용하면 좋은데, 단점이 2월 30일(2023-02-30)을 아규먼트로 넣어도 오류(NaN)가 발생하지 않는 현상이 발생합니다.
그리고 new Date("2023-02-30")로 넣어도 오류가 발생하지 않아 try catch를 할 수 없습니다.

날짜 문자(YYYY-MM-DD)를 체크 로직 순서는 아래과 같이 작성합니다.
(1) YYYY-MM-DD 형식 체크
(2) Date.parse를 이용하여 정확한 날짜 체크
(3) new Date(...).toISOString() 함수로 날짜 문자와 Date형으로 형변환한 값이 동일한지 체크

1. YYYY-MM-DD 형식 체크

날짜 문자의 길이는 10이고, "-"로 문자를 분리한 배열로 체크합니다.

var dateStr = "2023-08-29";
var dateArr = dateStr.split('-');
if(dateStr.length != 10 || dateArr.length != 3 || dateArr[0].length != 4 || dateArr[1].length != 2 || dateArr[2].length != 2){
	alert(dateStr + "은(는) YYYY-MM-DD 형식이어야 합니다.");
}

 

2. Date.parse() 함수

Date.parse 함수를 사용하여 날짜를 체크하는 것이 가장 이상적이지만, 2월 30일을 입력하면 오류가(NaN) 발생하지 않는 문제가 있습니다.

var dateStr = "2023-08-32";
if(isNaN(Date.parse(dateStr))){
	alert(dateStr + "는 정확한 날짜가 아닙니다.");
}

 

3. new Date(...).toISOString() 함수

new Date(...) 생성자도 마찬가지로 2월 30일의 경우 오류가 발생하지 않습니다.
Date.parse() 함수로 정확한 날짜를 체크하고 2월의 29~31일은 new Date(...).toISOString()로 체크합니다.

var dateStr = "2023-02-31";
if(new Date(dateStr).toISOString().startsWith(dateStr) == false){
	alert(dateStr + "는 정확한 날짜가 아닙니다.");
}

 

위의 날짜 체크 로직의 순서대로 함수를 작성했습니다.

function checkDate(yyyyMMdd){
	var dateArr = yyyyMMdd.split('-');
	if(yyyyMMdd.length != 10 || dateArr.length != 3 || dateArr[0].length != 4 || dateArr[1].length != 2 || dateArr[2].length != 2){
		alert(yyyyMMdd + "은(는) YYYY-MM-DD 형식이어야 합니다.");
		return false;
	}
	
	if( isNaN(Date.parse(yyyyMMdd)) ||new Date(yyyyMMdd).toISOString().startsWith(yyyyMMdd) == false){
		alert(yyyyMMdd + "는 정확한 날짜가 아닙니다.");
		return false;
	}
	
	
	return true;
}
반응형

댓글