Moment.jsとは?

Moment.jsは、日付の解析、検証、操作、フォーマットに広く使用されているJavaScriptライブラリです。最新の代替手段が登場する前は、Moment.jsはJavaScriptアプリケーションにおける日付処理の事実上の標準でした。シンプルでチェーン可能なAPIを提供し、日付の操作を直感的かつ簡単にします。date-fnsやLuxonなどの新しいライブラリが存在しますが、Moment.jsは依然としてレガシーコードベースで広く使用されており、バグ修正のために積極的に保守されています。既存のプロジェクトでこれに依存する開発者にとって、Moment.jsの理解は不可欠です。

なぜ日付操作ライブラリを使用するのか?

JavaScriptのネイティブなDateオブジェクトは、使用が非常に困難です。ブラウザ間で動作が一貫していない、月のインデックスが混乱している(1-12ではなく0-11)、フォーマットオプションが限定的、タイムゾーンのサポートが組み込まれていません。Moment.jsのような日付ライブラリは、一貫性のある十分に文書化されたAPIを提供することでこれらの問題を解決します。夏時間の切り替え、うるう年、ロケール固有のフォーマットなどのエッジケースを自動的に処理し、開発者がエラーが発生しやすい日付ロジックをゼロから書く手間を省きます。

ツールの説明

Moment.js Playgroundは、Moment.jsライブラリを試験するためのインタラクティブなブラウザベースの環境です。エディタでJavaScriptコードを直接記述して実行でき、Moment.jsとMoment Timezoneへの完全なアクセスが可能です。Playgroundは入力時にコードを自動的に実行し(デバウンス付き)、すべてのconsole出力を下部のターミナルスタイルのパネルに表示します。開発環境をセットアップすることなく、Moment.jsの学習、日付フォーマット文字列のテスト、日付計算のデバッグ、時間関連ロジックのプロトタイピングに最適です。

現在の日付をフォーマットする:

const now = moment();
console.log(now.format("MMMM Do, YYYY"));
// 出力: December 30th, 2025

console.log(now.format("dddd, h:mm A"));
// 出力: Monday, 3:45 PM

異なる日付形式を解析する:

const date1 = moment("2025-12-25", "YYYY-MM-DD");
const date2 = moment("25/12/2025", "DD/MM/YYYY");
const date3 = moment("Dec 25, 2025", "MMM D, YYYY");

console.log(date1.format("dddd")); // Thursday
console.log(date2.isValid()); // true
console.log(date3.month()); // 11 (0-indexed)

相対時間を計算する:

const past = moment().subtract(3, "days");
const future = moment().add(2, "weeks");

console.log(past.fromNow()); // 3 days ago
console.log(future.fromNow()); // in 14 days
console.log(past.from(future)); // 17 days ago

日付の算術演算:

const date = moment("2025-01-15");

const nextMonth = date.clone().add(1, "month");
const lastWeek = date.clone().subtract(1, "week");
const endOfMonth = date.clone().endOf("month");

console.log(nextMonth.format("YYYY-MM-DD")); // 2025-02-15
console.log(lastWeek.format("YYYY-MM-DD")); // 2025-01-08
console.log(endOfMonth.format("YYYY-MM-DD")); // 2025-01-31

期間を操作する:

const start = moment("2025-01-01");
const end = moment("2025-12-31");

const duration = moment.duration(end.diff(start));

console.log(duration.asDays() + " days"); // 364 days
console.log(duration.asWeeks() + " weeks"); // 52 weeks
console.log(duration.humanize()); // a year

日付を比較する:

const date1 = moment("2025-06-15");
const date2 = moment("2025-12-25");

console.log(date1.isBefore(date2)); // true
console.log(date1.isAfter(date2)); // false
console.log(date1.isSame(date2, "year")); // true
console.log(date1.isBetween("2025-01-01", "2025-08-01")); // true

タイムゾーンを操作する:

const now = moment();

console.log(now.tz("America/New_York").format("h:mm A z"));
console.log(now.tz("Europe/London").format("h:mm A z"));
console.log(now.tz("Asia/Tokyo").format("h:mm A z"));

機能

  • 完全なMoment.jsライブラリ: 解析、フォーマット、操作、比較を含むすべてのMoment.js関数にアクセス可能
  • タイムゾーンサポート: 世界中のタイムゾーンで作業するためにMoment Timezoneが事前にロードされています
  • ライブコード実行: 入力時にコードが自動的に実行され、スマートなデバウンス機能付き
  • 組み込みターミナル: ブラウザの開発者ツールを開くことなく、console出力をすぐに表示
  • 構文ハイライト: コードの可読性向上のためのJavaScript構文ハイライト
  • エラーハンドリング: ランタイムエラーはターミナル出力に明確に表示されます

ユースケース

  • Moment.jsの学習: プロジェクトセットアップなしでAPIを試験し、すぐに結果を確認
  • フォーマット文字列のテスト: 異なるフォーマットトークンを試して、必要な日付出力を実現
  • 日付計算のデバッグ: アプリケーションに実装する前に複雑な日付演算をテスト
  • タイムゾーン変換: 異なるタイムゾーン間の時間をすばやく変換
  • レガシーコード保守: 既存アプリケーションを保守する際にMoment.jsコードスニペットをテスト

一般的なフォーマットトークン

トークン 説明
YYYY 4桁の年 2025
YY 2桁の年 25
MM 2桁の月 01-12
MMM 短い月名 Jan, Feb
MMMM 完全な月名 January
DD 2桁の日 01-31
Do 序数付きの日 1st, 2nd
dddd 完全な曜日名 Monday
ddd 短い曜日名 Mon
HH 24時間形式の時間 00-23
hh 12時間形式の時間 01-12
mm 00-59
ss 00-59
A AM/PM(大文字) AM, PM
a am/pm(小文字) am, pm
z タイムゾーン略語 EST, PST
Z タイムゾーンオフセット +05:00

一般的なメソッドリファレンス

メソッド 説明
moment() 現在を作成 moment()
format(string) 文字列にフォーマット moment().format("YYYY-MM-DD")
add(n, unit) 時間を追加 moment().add(7, "days")
subtract(n, unit) 時間を減算 moment().subtract(1, "month")
startOf(unit) ユニットの開始 moment().startOf("week")
endOf(unit) ユニットの終了 moment().endOf("month")
fromNow() 相対時間 moment("2025-01-01").fromNow()
diff(moment) 差分 momentA.diff(momentB, "days")
isBefore(moment) 前か判定 momentA.isBefore(momentB)
isAfter(moment) 後か判定 momentA.isAfter(momentB)
isSame(moment, unit) 同じか判定 momentA.isSame(momentB, "month")
isValid() 有効性を確認 moment("invalid").isValid()
clone() コピーを作成 moment().clone()
tz(zone) タイムゾーン変換 moment().tz("America/New_York")

時間単位

Moment.jsは、add、subtract、startOf、endOf、およびdiff操作に対してこれらの時間単位をサポートしています:

  • years / y
  • quarters / Q
  • months / M
  • weeks / w
  • days / d
  • hours / h
  • minutes / m
  • seconds / s
  • milliseconds / ms