원문 캡처 · github.com
원문 캡처 · github.com

Momentum은 Luxon 3.7과 같은 API를 제공하면서 날짜·시간 계산의 기반을 JavaScript의 Temporal로 바꾼 라이브러리다. 기존 Luxon 사용법을 유지하려는 프로젝트가 적용할 수 있지만, 런타임에 Temporal이 없으면 폴리필을 설치해야 한다.

js
import { DateTime } from "@momentum-js/momentum";

DateTime.now().setZone("America/New_York").minus({ weeks: 1 }).endOf("day").toISO();

Momentum은 DateTime, Duration, Interval, Info, Settings, Zone 클래스와 Luxon의 메서드·옵션·날짜 형식 지정 규칙을 제공한다. Luxon 테스트 1,200여 개와 API 비교, 추가 동작 일치 테스트로 검증했다고 프로젝트는 설명한다. 기존 기능에 더해 Temporal 객체와 변환하는 메서드도 제공한다.

Node.js 26, Bun, 최신 브라우저에서는 네이티브 Temporal을 사용할 수 있다. 구형 런타임에서는 temporal-polyfill을 설치하고 다음 진입점을 사용한다. 전역 Temporal이 없으면 처음 사용할 때 TemporalUnavailableError가 발생한다.

sh
bun add temporal-polyfill
js
import { DateTime } from "@momentum-js/momentum/polyfill";

성능은 작업과 런타임에 따라 다르다. 프로젝트가 Luxon 자체 벤치마크로 비교한 결과, Momentum은 명시적 IANA 시간대를 쓰는 일부 작업과 시간대 변경에서 더 빨랐지만, 날짜 필드로 새 값을 만드는 작업이나 필드를 읽는 작업에서는 느린 경우가 있었다. 특히 폴리필 환경에서는 Temporal 기반 코어의 필드 읽기가 더 느려 Settings.temporalNative = false로 Luxon의 계산 방식을 선택할 수 있다고 안내한다. 이 설정은 시간대 오프셋을 Temporal에서 가져오며, DST의 모호한 시간 처리 등 일부 경계 사례에서는 두 방식의 결과가 다를 수 있다.

Momentum은 네이티브 Temporal로 옮기기 위한 임시 도구로도 설계됐다. 저장소의 마이그레이션 명령은 TypeScript 타입 검사로 Momentum 또는 Luxon 사용 지점을 찾아 Temporal로 바꿀 수 있는지 확인하며, 정확성이 속성 테스트로 확인된 변환만 기본 적용한다. 나머지는 --accept가 필요할 수 있다. 설치와 차이점, 벤치마크는 GitHub 저장소에서 확인할 수 있다.