はじめに

JavaScript や Node.js で日付を扱う古典的な方法としては Date が存在しています。

しかし、このライブラリは多くの問題を抱えています。

  • ローカル時間とグローバル時間の区別がない。
  • 時間差の概念が存在しない。
  • 日付の解析に関して仕様が存在しない。
  • 月を 0-11 で扱う。
  • 変更可能で、参照渡しにより勝手な改変がされる。

このように多くの問題を抱えていたことから、Moment.jsdate-fns のような外部ライブラリに依存する状況が長らく続いていました。

2026-05-05 (ISO 8601 表記) に公開された Node.js 26.0.0 では、新しく Temporal が日付ライブラリとして標準になりました。

この記事では、Temporal クラスについて解説します。

Temporal

Temporal は次世代の日付ライブラリで、Math オブジェクトのように多くの関数が Static メソッドとして定義されています。

一方で、PlainDate.from() などで生成したインスタンスには .add().until() といったインスタンスメソッドも多数用意されており、Static メソッドとインスタンスメソッドを組み合わせた設計となっています。

議論の前提において、Temporal は Date であった主要な仕様上の不備は全て改修されている全く新しい設計思想のライブラリです。
そのため、Date にあったような設計上の不備は基本的に存在しません。

実用面に着目して、実用する際の機能が実装されているか? という点を確認します。
主たる機能について、Temporal および主要なライブラリである Moment.js と date-fns を比較して、その強さについてみてみます。

ローカリゼーション

タイムゾーンや DST (夏時間)、ローカライズは、ローカリゼーションに必要な機能です。

Date 型では、ローカルタイムでの取り扱いが基本であり、UTC の取り扱いを不得意としていました。

多くのライブラリでもプラグイン扱いとなっており、対応が難しい領域です。

機能 Temporal Moment.js date-fns
タイムゾーン
タイムゾーン指定 対応 プラグイン
moment-timezone
別ライブラリ
date-fns-tz
タイムゾーン変換 対応
.withTimeZone
プラグイン
.tz
別ライブラリ
utcToZonedTime
オフセット取得 対応
offsetNanoseconds
対応
.utcOffset
別ライブラリ
getTimezoneOffset
DST (夏時間)
DST 処理 正確(考慮済み) 部分的(known issue) 別ライブラリ
date-fns-tz
DST 折り返し時刻 対応
disambiguation
非対応 非対応
ローカライズ
ロケールフォーマット Intl 委譲 ロケール読込
.locale
ロケール読込
date-fns/locale
カレンダーシステム(和暦ほか) 対応
PlainDate.from({calendar:'japanese'})
非対応 非対応

入出力

日付データは、文字列などの様々な形式で外部システムと連携します。

入出力に関わる機能は、外部連携や表示に対して求められる主要機能です。

機能 Temporal Moment.js date-fns
Parse
ISO 8601 厳密 対応 対応
カスタムフォーマット 非対応 対応 対応
オブジェクト構築 対応 対応 非対応
Format
ISO 8601 対応
toString
対応
toISOString
対応
formatISO
カスタムフォーマット Intl 委譲(部分的) 対応
format
対応
format
Unixtime
Unix 秒 → 日付 対応
fromEpochSeconds
対応
moment.unix
対応
fromUnixTime
日付 → Unix 秒 対応
epochSeconds
対応
unix
対応
getUnixTime

計算

日付の計算は、足し算・引き算のような四則演算だけでなく、月初めや期間といった複雑な計算を必要とします。

そのため、これらに対応できることは活用において重要です。

機能 Temporal Moment.js date-fns
加算 / 減算
加算 Immutable Mutable Immutable
減算 Immutable Mutable Immutable
期間の開始・終了
日の開始・終了 対応
with({hour:0,…})
対応
startOf('day')
対応
startOfDay
週の開始・終了 非対応 対応
startOf('week')
対応
startOfWeek
月の開始・終了 対応
with({day:1,…})
対応
startOf('month')
対応
startOfMonth
期間
差分 対応
until
対応
diff
対応
differenceInDays
Duration 対応
Duration
部分的
duration
非対応

その他

機能 Temporal Moment.js date-fns
Immutable 対応 非対応 対応
型分離 対応 単一型 単一型
メンテナンス ネイティブ メンテナンスモード コミュニティ

まとめ

機能比較のとおり、主たる用途において Temporal は他のライブラリに比べて機能的に優れており、ネイティブで利用できる強力な日時ライブラリとなります。

今後の用途においては Temporal の利用が推奨されております。
今までサードパーティライブラリに依存して処理を行っていた『日時』という基本機能を、ファーストパーティだけでこれほどまでに活用できるようになったことは革新的です。

まさに、Temporal は Node.js 26 の目玉機能といえるでしょう。