개요
여러 프로젝트를 맞아 웹사이트를 구축 및 개발을 하다보면 여러 형태의 포멧에 맞게 그려줘야 할 때가 있다. 나는 다른 업체의 API를 통해 게시글을 가져오는 중 Date 형식이 '2024-10-10 오후 07:08:04'라는 값으로 넘어오고 있었고 화면에 년월일만 표시하면 되는 상황이였다.
날짜값에 오전/오후가 포함된 경우를 보아 아래와 같이 정규식으로 분기 처리했는데 더 좋은 방법이 있는지 모르겠다.. 추후에 문제가 생긴다면 변경해야겠다.
if("오후" === date.replace(/[^가-힣]gi/, ""))

다음으로 필요한 코드는 날짜를 원하는 포멧에 맞게 뿌려주는 함수였다.
여러 라이브러리를 사용하며 format에 맞게 리턴해주는 함수에 대해 구체적으로 깊게 생각을 해보지는 않았지만, 받은 format에 정규식으로 치환하여 보내주면 모든 포맷 형식에 맞게 되지 않을까 생각해서 간단한 날짜 변환 함수를 만들어 보았다.

위 처럼 YYYY-MM-DD hh:mm:ss, YYYY.MM.DD, YYYY년 MM월 DD일 등 여러 포멧에 맞게 사용할 수 있다. 확실히 정규식을 사용하면 사용성이 올라가는 것 같다. (년월일 시분초 모두 가능)
만약 문제가 생긴다면 추후에 변경해야겠다.
함수
/**
* 게시글 날짜 포멧 변경
* @param date String '2024-11-10 19:08:04'
* @param format String 'YYYY.MM.DD'
* @return '2024.11.10'
* */
var fn_date_format = function(date, format = 'YYYY.MM.DD HH:mm:ss') {
var nDate = new Date(date);
var year = nDate.getFullYear().toString().slice(-(/Y+/i.test(format) && format.match(/Y+/i)[0].length || 4));
var month = (nDate.getMonth() + 1).toString().padStart(format.includes('MM') ? 2 : 1, '0');
var day = nDate.getDate().toString().padStart(format.toUpperCase().includes('DD') ? 2 : 1, '0');
var hour = nDate.getHours().toString().padStart(format.toUpperCase().includes('HH') ? 2 : 1, '0');
var min = nDate.getMinutes().toString().padStart(format.includes('mm') ? 2 : 1, '0');
var sec = nDate.getSeconds().toString().padStart(format.toUpperCase().includes('SS') ? 2 : 1, '0');
return format.replace(/Y{1,4}/i, year)
.replace(/MM?/, month)
.replace(/DD?/i, day)
.replace(/HH?/i, hour)
.replace(/mm?/, min)
.replace(/ss?/i, sec);
}
혹시 필요한 사람이 있을까 코드와 히스토리를 공유합니다.
참고


'Dev > JavaScript' 카테고리의 다른 글
[Javascript] 기초 (0) | 2024.05.21 |
---|