본문 바로가기
Mechanic: IT 인터넷/Mechanic, M-Tech

JavaScript 날짜 포멧 지정과 날짜 계산 - Date 객체 활용

by M-LOG : 엠로그 2014. 2. 13.
반응형

원본 작성일: 2014년경
보완 작성일: 2026.02.14

JavaScript 날짜 포맷 지정 방법

JavaScript에서 날짜를 원하는 형식으로 표시하거나, 특정 기간만큼 더하고 빼는 계산이 필요할 때 정리해둔 유틸 함수들이다.

날짜 문자열 → 포맷 변환

yyyyMMddHHmm 형식의 문자열을 원하는 형태로 변환하는 함수다.

function formatDateStr(dateStr, format, separator) {
    var y = dateStr.substring(0, 4);
    var m = dateStr.substring(4, 6);
    var d = dateStr.substring(6, 8);
    var h = dateStr.substring(8, 10);
    var min = dateStr.substring(10, 12);

    if (separator === 'ko') {
        // 한글 형식: "2014년 02월 13일"
        if (format === 'yyyyMMdd') return y + '년 ' + m + '월 ' + d + '일';
        return y + '년 ' + m + '월 ' + d + '일 ' + h + '시 ' + min + '분';
    }

    // 구분자 형식: "2014/02/13"
    if (format === 'yyyyMMdd') return y + separator + m + separator + d;
    return y + separator + m + separator + d + ' ' + h + ':' + min;
}

formatDateStr('20140213', 'yyyyMMdd', 'ko');  // "2014년 02월 13일"
formatDateStr('20140213', 'yyyyMMdd', '-');    // "2014-02-13"

날짜 계산 (n일 전/후)

현재 시간 기준으로 년/월/일/시/분/초를 더하거나 빼는 함수다.

function calcDate(field, interval, format, separator) {
    var now = new Date();

    switch (field) {
        case 'YY':  now.setFullYear(now.getFullYear() + interval); break;
        case 'MM':  now.setMonth(now.getMonth() + interval); break;
        case 'DD':  now.setDate(now.getDate() + interval); break;
        case 'HH':  now.setHours(now.getHours() + interval); break;
        case 'MIN': now.setMinutes(now.getMinutes() + interval); break;
        case 'SS':  now.setSeconds(now.getSeconds() + interval); break;
    }

    // Date 객체를 문자열로 변환 후 포맷 적용
    var y = now.getFullYear();
    var m = String(now.getMonth() + 1).padStart(2, '0');
    var d = String(now.getDate()).padStart(2, '0');
    var h = String(now.getHours()).padStart(2, '0');
    var min = String(now.getMinutes()).padStart(2, '0');
    var s = String(now.getSeconds()).padStart(2, '0');

    if (format === 'yyyyMMdd') return y + separator + m + separator + d;
    return y + separator + m + separator + d + ' ' + h + ':' + min + ':' + s;
}

calcDate('DD', 30, 'yyyyMMddHHmm', '-');  // 30일 뒤 날짜
calcDate('MM', -1, 'yyyyMMdd', '/');       // 1개월 전 날짜

지금이라면? 대안들

Intl.DateTimeFormat (내장)

별도 라이브러리 없이 로케일에 맞는 포맷을 적용할 수 있다.

const date = new Date();

// 한국어 형식
new Intl.DateTimeFormat('ko-KR').format(date);
// "2026. 2. 14."

// 상세 옵션
new Intl.DateTimeFormat('ko-KR', {
    year: 'numeric', month: 'long', day: 'numeric',
    hour: '2-digit', minute: '2-digit'
}).format(date);
// "2026년 2월 14일 오후 3:30"

dayjs (경량 라이브러리)

moment.js의 대체제로.

import dayjs from 'dayjs';

dayjs().format('YYYY-MM-DD');           // "2026-02-14"
dayjs().add(30, 'day').format('YYYY-MM-DD');  // 30일 뒤
dayjs().subtract(1, 'month').format('YYYY/MM/DD');  // 1개월 전

어떤 걸 쓸까

상황 추천
단순 표시만 Intl.DateTimeFormat
계산 + 포맷 모두 필요 dayjs
레거시 프로젝트 유지보수 기존 유틸 함수 유지
반응형