JavaScriptでアプリケーションを開発する際、現在の日付や時刻を取得する処理は非常に頻繁に必要となります。
カレンダーの表示やログの記録、ユーザーへの通知メッセージなど、日付情報の活用範囲は多岐にわたります。
以前のJavaScriptではDateオブジェクトを使用するのが一般的でしたが、最新の標準仕様ではより洗練された方法が登場しています。
この記事では、現代のJavaScript開発において今日の日付をシンプルかつ正確に取得する方法を整理して紹介します。
Dateオブジェクトを使用した基本の取得方法
もっとも伝統的で、あらゆる環境で動作が保証されているのがDateオブジェクトを利用する方法です。
new Date()を実行することで、実行した瞬間の日時情報を持つインスタンスを作成できます。
// 現在の日時を取得する
const now = new Date();
console.log(now);
Wed May 20 2026 10:30:00 GMT+0900 (日本標準時)
この方法で取得できるデータは、実行環境のシステム時計に基づいた日時情報です。
しかし、new Date()で得られる形式は人間がそのまま読み取るには少し複雑です。
そのため、特定の要素(年・月・日)を個別に抽出するメソッドを組み合わせて利用することが一般的です。
年・月・日を個別に取得する
日付の中から「年」や「月」だけを取り出したい場合は、専用のゲッターメソッドを使用します。
ここで注意が必要なのは、「月」の取得方法が0から始まるインデックス形式である点です。
1月は0、12月は11として返されるため、直感的な数値にするには1を加算する必要があります。
const today = new Date();
const year = today.getFullYear(); // 年
const month = today.getMonth() + 1; // 月(0から始まるため+1する)
const date = today.getDate(); // 日
console.log(`今日は ${year}年${month}月${date}日 です。`);
今日は 2026年5月20日 です。
また、曜日の情報を取得するgetDay()メソッドもあり、こちらは0(日曜日)から6(土曜日)の数値を返します。
これらの基本メソッドを組み合わせることで、シンプルな日付表示を自作することが可能です。
Intl.DateTimeFormatによる高度なフォーマット
取得した日付を「2026/05/20」や「2026年5月20日」のように整形したい場合、手動で文字列を連結するのは手間がかかります。
そこで活用したいのが、Intl.DateTimeFormatオブジェクトです。
このAPIを使用すると、国や地域の文化に合わせた形式で日付を簡単に変換できます。
const now = new Date();
// 日本の書式でフォーマットする
const formatter = new Intl.DateTimeFormat('ja-JP', {
year: 'numeric',
month: '2-digit',
day: '2-digit'
});
console.log(formatter.format(now));
2026/05/20
オプションを指定することで、「月」を漢数字で表示したり、曜日を含めたりといったカスタマイズも容易です。
ゼロ埋め(2桁表示)の処理も自動で行われるため、コードの可読性が格段に向上します。
ブラウザの言語設定に合わせた自動判別も可能であり、グローバルなサービスを展開する際にも非常に強力なツールとなります。
最新のTemporal APIを活用する
2026年現在のモダンなJavaScript環境では、Temporal APIの使用が推奨される場面が増えています。
従来のDateオブジェクトは、ミュータブル(不変ではない)であることや、タイムゾーンの扱いが複雑であるといった課題を抱えていました。
Temporal APIはこれらの問題を解決するために導入された、新しく堅牢な日時操作の仕組みです。
Temporalで今日の日付を取得する
Temporalを使用して今日の日付を取得するには、Temporal.Now.plainDateISO()を使用します。
// 今日をISO 8601形式のプレーンな日付として取得
const today = Temporal.Now.plainDateISO();
console.log(today.toString());
2026-05-20
このメソッドで返されるオブジェクトは、時間やタイムゾーンの情報を含まない「純粋な日付」のみを保持します。
そのため、時刻のズレを気にすることなく日付の計算や比較を行うことが可能です。
Temporalのメリット
Temporal APIを使用する最大のメリットは、コードが直感的でバグが混入しにくい点にあります。
月が1から始まる自然な数値であることや、日付の加算・減算が専用のメソッドで安全に行える点が特徴です。
以下は、今日から1週間後の日付を計算する例です。
const today = Temporal.Now.plainDateISO();
const nextWeek = today.add({ days: 7 });
console.log(`今日は ${today}`);
console.log(`1週間後は ${nextWeek}`);
今日は 2026-05-20
1週間後は 2026-05-27
Dateオブジェクトのように元の値を書き換えてしまう心配がないため、大規模な開発でも安心して利用できます。
手法の比較と使い分け
JavaScriptには複数の日付取得方法が存在するため、プロジェクトの要件に合わせて適切なものを選ぶ必要があります。
主な手法の特徴を以下の表にまとめました。
| 手法 | 主な特徴 | 推奨される用途 |
|---|---|---|
new Date() | 標準的だが、月の指定など癖が強い。 | 古いブラウザのサポートが必要な場合。 |
Intl.DateTimeFormat | 表示形式の変換に特化している。 | ユーザーの地域に合わせた表示が必要な場合。 |
Temporal API | 最新かつ安全。設計がモダンで直感的。 | 現代的な開発環境や複雑な計算を行う場合。 |
シンプルな表示だけであればIntl、ロジックを伴う操作であればTemporalを選択するのが現在のベストプラクティスです。
ライブラリ(Day.js等)を導入せずに、標準機能だけで完結できる範囲が広がっていることを意識しておくと良いでしょう。
日付を扱う際の注意点
今日の日付を取得する際には、実行される「環境」についても考慮しなければなりません。
ブラウザで実行する場合はユーザーの端末設定に依存し、Node.jsなどのサーバーサイドで実行する場合はサーバーのタイムゾーン設定に依存します。
日本国内向けのサービスであれば、「Asia/Tokyo」のタイムゾーンを明示的に指定することが重要です。
また、日付の文字列を比較する際は、フォーマット(ハイフン区切りかスラッシュ区切りか等)を統一しておく必要があります。
予期せぬ動作を防ぐために、取得した日付データは常に不変な値として扱うよう心がけましょう。
まとめ
JavaScriptで今日の日付を取得する方法は、言語の進化とともに大きく向上しました。
基本となるDateオブジェクトの仕組みを理解した上で、最新のTemporal APIやIntlオブジェクトを積極的に活用しましょう。
これにより、従来必要だった複雑な計算や外部ライブラリへの依存を減らすことが可能になります。
プロジェクトの要件や対象ブラウザに合わせて最適な手法を選び、清潔でメンテナンス性の高いコードを目指してください。
まずは、自分の開発環境でTemporalを試してみることから始めてみてはいかがでしょうか。
