Moment.js はメンテナンスモードに入っており、開発チーム自身も新しいプロジェクトにはモダンなライブラリを勧めています。Day.js はほぼ同じ API を約 2 KB で提供しているため、各セクションで Day.js での書き方も並べて示しています。
トークンをクリックするとフォーマット文字列に挿入されます。例は基準日時とロケールで表示しています。
| トークン | 例 | 意味 | |
|---|---|---|---|
| 年・四半期 | |||
| 4 桁の年 | |||
| 2 桁の年 | |||
| 四半期(1–4) | |||
| 四半期(序数) | |||
| 月 | |||
| 月(1–12) | |||
| 月(序数) | |||
| 月(2 桁) | |||
| 月の短縮名 | |||
| 月の名前 | |||
| 日(月内・年内) | |||
| 日 | |||
| 日(序数) | |||
| 日(2 桁) | |||
| 年間通算日 | |||
| 年間通算日(3 桁) | |||
| 曜日 | |||
| 曜日番号(0 = 日曜) | |||
| 曜日(最短) | |||
| 曜日(短縮) | |||
| 曜日(完全) | |||
| 曜日番号(ロケール基準) | |||
| ISO 曜日番号(1 = 月曜) | |||
| 週 | |||
| 年内の週番号(ロケール基準) | |||
| 週番号(序数) | |||
| 週番号(2 桁) | |||
| ISO 週番号 | |||
| ISO 週番号(2 桁) | |||
| 週の属する年(ロケール基準) | |||
| ISO 週の属する年 | |||
| 時 | |||
| 時、0–23 | |||
| 時、00–23 | |||
| 時、1–12 | |||
| 時、01–12 | |||
| 時、1–24 | |||
| 時、01–24 | |||
| 分・秒 | |||
| 分 | |||
| 分(2 桁) | |||
| 秒 | |||
| 秒(2 桁) | |||
| 1/10 秒 | |||
| 1/100 秒 | |||
| ミリ秒 | |||
| 午前 / 午後 | |||
| AM / PM(午前 / 午後) | |||
| am / pm(小文字) | |||
| タイムゾーン | |||
| UTC オフセット、±HH:mm | |||
| UTC オフセット、±HHmm | |||
| moment-timezone が必要 | タイムゾーン略称 | ||
| moment-timezone が必要 | タイムゾーン名 | ||
| Unix 時刻 | |||
| Unix 秒 | |||
| Unix ミリ秒 | |||
| ロケール書式 | |||
| ロケールの時刻 | |||
| ロケールの時刻(秒まで) | |||
| ロケールの数字日付 | |||
| ロケールの日付(月名入り) | |||
| ロケールの日付と時刻 | |||
| ロケールの日付・曜日・時刻 | |||
| 短い数字日付 | |||
| 短い日付(月名入り) | |||
| 短い日付と時刻 | |||
| 短い日付・曜日・時刻 | |||
| エスケープ | |||
| 角かっこ内の文字はそのまま出力 | |||
空欄なら ISO 8601 として解析します。
各行は基準日時をずらし、from() と calendar() で基準との関係を表します。
| ずらし | from(ref) | calendar(ref) |
|---|---|---|
| .add(-45, 'second') | ||
| .add(-10, 'minute') | ||
| .add(-3, 'hour') | ||
| .add(-1, 'day') | ||
| .add(-5, 'day') | ||
| .add(-3, 'month') | ||
| .add(-2, 'year') | ||
| .add(30, 'minute') | ||
| .add(2, 'day') | ||
| .add(1, 'month') |
日常的な処理を結果付きで紹介します。「試す」で下のコードランナーに読み込めます。
| やりたいこと | Moment.js |
|---|---|
現在時刻をフォーマット | moment().format('YYYY-MM-DD HH:mm:ss')→ |
日数を足す | moment('2023-01-01').add(1, 'days').format('YYYY-MM-DD')→ |
今からどれくらいか | moment().subtract(7, 'days').fromNow()→ |
今月の初日 | moment().startOf('month').format('YYYY-MM-DD')→ |
今年の最終日 | moment().endOf('year').format('YYYY-MM-DD')→ |
今週の始まり(ロケール依存) | moment().startOf('week').format('YYYY-MM-DD ddd')→ |
2 つの日付の日数差 | moment().diff(moment('2022-01-01'), 'days')→ |
今月の日数 | moment().daysInMonth()→ |
四半期 | moment().quarter()→ |
カレンダー表記 | moment().add(1, 'days').calendar()→ |
2 つの日付の間にあるか | moment('2024-12-31').isBetween('2024-01-01', '2025-01-01')→ |
今日かどうか | moment().isSame(moment(), 'day')→ |
うるう年かどうか | moment('2024-01-01').isLeapYear()→ |
日付を厳密に検証 | moment('2023-02-30', 'YYYY-MM-DD', true).isValid()→ |
独自の書式を解析 | moment('13/10/2026 14:30', 'DD/MM/YYYY HH:mm').format()→ |
Unix タイムスタンプ(秒) | moment().unix()→ |
現在の UTC 時刻 | moment.utc().format()→ |
別のタイムゾーンの時刻 | moment-timezone が必要 |
期間を自然な文章に | moment.duration(90, 'minutes').humanize()→ |
月末に 1 か月足す | moment('2026-01-31').add(1, 'months').format('YYYY-MM-DD')→ |
代入せずに add() を呼ぶ | (() => { const d = moment('2026-01-01'); d.add(1, 'days'); return d.format('YYYY-MM-DD') })()→ |
moment を使った式を入力すると、その場でブラウザ内で実行します。上の書き方で使うプラグインはすべて有効で、上で選んだロケールが適用されます。
Moment.js のフォーマット、パース、相対時間、期間を試せます。各結果の横に Day.js の結果を並べて違いに印を付けるので、移行前に何が変わるか確認できます。どちらもブラウザ内で動きます。
「基準日時」と「ロケール」を設定し、moment.utc() を使うコードなら「UTC として扱う」をオンにします。
「フォーマット文字列」に書式を入力すると、「出力」に Moment と Day.js の結果が表示され、「同じ出力」か「出力が異なります」と示されます。
「書式トークン一覧」で Day.js にないトークンやプラグインが必要なトークンを確認し、クリックして書式に挿入します。
「パースを試す」「相対時間」「期間(Duration)」で 2 つのライブラリを比べます。Day.js の結果が異なる箇所は色付きで表示されます。
「よく使う書き方」で日常的な処理の両方の書き方を確認し、「試す」で Moment 版を「コードランナー」で実行します。
Moment.js はメンテナンスモードに入っており、開発チーム自身も新規プロジェクトにはモダンなライブラリを勧めています。ページ上部の案内から、Moment のプロジェクト状況と Day.js のプレイグラウンドに移動できます。
一番はミュータビリティです。Moment の add() は元のオブジェクトを変更しますが、Day.js は新しいオブジェクトを返すので結果を代入し直す必要があります。また Day.js では多くの機能にプラグインが必要で、各書き方に必要なプラグインを記載しています。
Qo、Mo、DDD、DDDD、e、E、S、SS です。「書式トークン一覧」ではこれらを Day.js 非対応と表示し、それ以外は必要なプラグインを示しています。
タイムゾーン名には別途 moment-timezone が必要で、このページでは読み込んでいないため、一覧に「moment-timezone が必要」と表示されます。Day.js では timezone プラグインで対応しています。
Moment.js と Day.js の正確なバージョンは、設定パネルの下に表示されています。
いいえ。どちらのライブラリもロケールファイルもこのページ内に読み込まれ、入力した内容はブラウザ内で実行されます。