반응형
자바스크립트로 날짜 정확한 날짜를 체크하는 것이 약간 애매합니다.
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;
}
반응형
'Javascript' 카테고리의 다른 글
자바스크립트 크롬에서 엣지로 링크 열기 (0) | 2023.11.08 |
---|---|
자바스크립트 ==와 ===의 차이점 (0) | 2023.10.25 |
[SlickGrid] 셀(Cell)에 툴팁(Tooltip) 표시하기 (0) | 2023.07.13 |
HTML의 특정 Input에 붙여넣기 못하게 처리하는 방법 (0) | 2022.09.22 |
Javascript 숫자 반올림 및 천자리 ","표시 함수 (0) | 2022.09.19 |
댓글