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 쪽으로.