← 글 목록

notes

Temporal API — Instant vs PlainDate

Date 혼선을 가르는 Temporal. Instant와 PlainDate를 분리한다.

참고: TC39 Temporal proposal / MDN Temporal (지원·폴리필은 환경마다 확인)

Date로 타임존·DST·파싱을 다루다 보면 숫자가 어긋난다.

Temporal은 날짜·시간·타임존·달력을 타입으로 나눈 API다.

flowchart TB
  Instant[Temporal.Instant] --> ZDT[ZonedDateTime]
  Plain[PlainDate / PlainTime / PlainDateTime] --> ZDT
  Duration[Duration] --> ZDT
  TZ[TimeZone] --> ZDT
const plain = Temporal.PlainDate.from('2026-09-26');
const next = plain.add({ days: 7 });
console.log(String(next)); // 2026-10-03

const instant = Temporal.Now.instant();
const seoul = instant.toZonedDateTimeISO('Asia/Seoul');
console.log(seoul.toString());

Date는 밀리초 숫자와 로컬/UTC 혼선이 한 객체에 얽혀 있다.

Temporal은 Instant(절대 시각)와 Plain*(달력 날짜)을 분리한다.

“벽시계 날짜”와 “타임라인 점”을 섞지 말라는 설계다.

Duration은 달·일처럼 달력에 의존하는 길이와, 시간처럼 고정 길이를 구분해 더한다.

Date.parse 구현 편차에 기대지 말고 from으로 명시 파싱한다.

질문 → 자답

Q. 지금 프로덕션?

A. 런타임 지원·폴리필 정책을 먼저 본다.

Q. Date 버리나?

A. 레거시는 Date. 새 도메인 모델은 Temporal 쪽으로.