2020-01-01 00:00:00 날짜를 new Date() 할당했을 뿐인데 갑자기 모든 데이터가 NaN으로 발생하는 이슈현상이 발생합니다. 참고로 해당 이슈는 최신 16 버전 이상의 iOS/Safari 에서는 발생하지 않습니다.
2000-01-01T03:00:01:00Z
형태처럼 T 구분자와 Z와 같은 타임존이 완벽에 하게 붙어있는 문자열형태를 말합니다.해당글 포함 여러 글들을 읽었지만 RFC3339, RFC2822 등의 키워드들도 등장해서 정확히 어떤 형태의 날짜 format들이 지원된다는지 파악하기 어려워 공식 문서에서 찾아봤습니다.
YYYY-MM-DDTHH:mm:ss.sssZ
이 공식적인 형식임참고로 MDN 한글 문서에는 많은 내용이 누락되어 있어 영어 버전의 MDN을 읽어보시는 것을 추천드립니다.
const convertDate = '2011-04-12 10:00:00'.replace(/-/g, "/");
const date = new Date(convertDate);
모든 브라우저에서 호환되는 방법
const convertDate = '2011-04-12 10:00:00'.replace(" ", "T");
const date = new Date(convertDate);
좀더 나아가 정규 표현식으로 패턴 매칭해보기
function convertStringToDate(originDate: string){
const regex = new RegExp(/(\d{4}-\d{2}-\d{2})\s(\d{2}:\d{2}:\d{2})/)
if (regex.test(originDate)) {
const convertDate = originDate.replace(" ", "T");
return new Date(convertDate);
} esle {
return new Date(originDate)
}
}
처음 해당 이슈를 접하고 구글링을 통해 얻은 해답인 "yyyy/MM/dd" 형태로 변환하는 것을 적용하였습니다. 하지만, 이 블로그를 작성하면서 공식 문서를 읽어보고 생각해보니 잠재적으로 이슈가 있을만한 해결책이였다는 생각이 들었습니다. 해결책을 찾아나가는 과정에서 공식 문서를 읽어보는 것은 필수라는 것을 깨달았습니다.
그리고, 생각보다 날짜 라이브러리들의 번들 크기가 크지 않아 잘 만들어진 날짜 라이브러리 사용하는 것도 나쁘지 않은 선택이라는 생각이 들어습니다.