2 분 소요

1. Date 객체 핵심 개념

  • 기준 시점: 1970-01-01 00:00:00 UTC
  • 정밀도: 1 밀리초(ms)
  • 생성자: new Date() 만 사용, Date래퍼가 아님
  • 로컬 vs UTC: 내부 저장은 UTC, 표시·계산 시 타임존 보정

2. 날짜 객체 빠르게 만들기

패턴 설명 예시
new Date() 현재 날짜/시간 new Date()
new Date("YYYY-MM-DD") 문자열 기반 new Date("2024-05-24")
new Date(ms) 1970년 이후 밀리초 new Date(86_400_000)
new Date(y, m, d, h, mi, s, ms) 숫자 지정 (월 0-11!) new Date(2024, 4, 24) → 5월24일

월(month)은 0부터 11 (0 = 1월)임을 항상 기억하세요.


3. Date.now() – 밀리초 타임스탬프

const nowMs = Date.now(); // 예: 1716540000000
const nowObj = new Date(nowMs); // 동일 시각 Date 객체
  • 고해상도 시간차 계산에 가장 안전

4. Date.prototype Getter 메소드

4-1 로컬 시간용 Getter

메소드 반환 범위
getFullYear() 연도 4자리
getMonth() 0-11
getDate() 일(1-31)  
getDay() 요일(0=일) 0-6
getHours() 0-23
getMinutes() / getSeconds() 분 / 초 0-59
getMilliseconds() ms 0-999
getTime() 1970 이후 ms
getTimezoneOffset() UTC-로컬 분 차이 KST → -540

✔ 요일 출력 예시

const days = ["", "", "", "", "", "", ""];
console.log(`오늘은 ${days[new Date().getDay()]}요일`);

4-2 UTC Getter

getUTCFullYear(), getUTCMonth(), getUTCDate(), getUTCHours()

서버 UTC 시간과 비교하거나, 타임존 무시 로직에서 사용.


5. Date.prototype Setter 메소드

메소드 기능 허용 범위
setFullYear(y, m?, d?) 연도(+월/일) 연, 월 0-11
setMonth(m) 0-11
setDate(d) 1-31 초과 시 자동 보정
setHours(h) / setMinutes(mi) / setSeconds(s) 시·분·초 0-23 / 0-59
setMilliseconds(ms) ms 0-999
setTime(ms) 1970 기준 ms 지정

자동 보정

const d = new Date();
d.setDate(40); // 40 → 다음 달로 롤오버

UTC Setter

setUTCFullYear(), setUTCMonth() … → 협정 세계시 기준으로 값 변경.


6. 날짜 차이 계산 – “D-Day” 만들기

const start = new Date(); // 오늘
const target = new Date("2030-12-25"); // 목표일
const oneDay = 86_400_000; // ms
const diff = Math.floor((target - start) / oneDay);
console.log(`크리스마스까지 ${diff}일 남았습니다!`);

7. 원하는 포맷(yyyy-mm-dd)으로 변환

전통적인 패딩 방법

function toYMD(d) {
  const y = d.getFullYear();
  const m = String(d.getMonth() + 1).padStart(2, "0");
  const da = String(d.getDate()).padStart(2, "0");
  return `${y}-${m}-${da}`;
}

Intl.DateTimeFormat 활용

const ymd = new Intl.DateTimeFormat("sv-SE", {
  dateStyle: "short",
}).format(new Date()); // "2025-06-03"

8. 타임존 – 한국 KST ↔ UTC 변환

// 한국(KST) → UTC
const kst = new Date();
const utc = new Date(kst.getTime() - 9 * 60 * 60 * 1000);

// UTC 문자열 → KST 표시
const utcStr = "2025-12-31T15:00:00Z";
console.log(
  new Date(utcStr).toLocaleString("ko-KR", { timeZone: "Asia/Seoul" })
);

9. Getter & Setter 메소드 요약표

분류 대표 메소드 설명
날짜 getFullYear, getMonth, getDate 연·월·일
시간 getHours, getMinutes, getSeconds 시·분·초
밀리초/오프셋 getMilliseconds, getTime, getTimezoneOffset 정밀 계산
요일 getDay 0 = 일
UTC getUTC…, setUTC… UTC 기준
Setter 핵심 setFullYear, setMonth, setDate, setHours, setTime 값 변경

질문 정리

  1. 월이 0부터 시작하는 이유는?

    초기 C 언어 시절 배열 인덱스를 그대로 따온 역사적 이유입니다.

  2. new Date("2025-02-30")은 오류가 나나요?

    아니요. 자바스크립트는 유효한 날짜가 될 때까지 롤오버 하여 3월 2일로 자동 조정합니다.

  3. 밀리초 대신 초 단위가 필요하면?

    Math.floor(Date.now() / 1000) 으로 간단히 변환 가능합니다.

  4. 서머타임(DST)까지 정확히 처리하려면?

    Intl.DateTimeFormattimeZone 옵션을 사용하거나, Luxon / Day.js 같은 라이브러리를 도입하세요.

  5. Temporal API는 언제 써야 하나요?

    복잡한 달력·타임존 로직이 많을 때 권장합니다. 현재 Stage-3 이므로 폴리필과 함께 사용하세요.

카테고리:

업데이트:

댓글남기기