グローバルに利用されるWebサービスやアプリでは、日付や数値の表示をユーザーの地域や言語に合わせることが重要です。JavaScriptのIntl APIを使うと、複雑なロジックを自作することなく国際化対応が可能になります。ここではIntl.DateTimeFormatとIntl.NumberFormatを中心に実用例を紹介します。
Intl APIとは
Intl(Internationalization)APIは、JavaScriptに標準搭載されている国際化対応のためのオブジェクト群です。日付や数値、通貨、相対時刻などをロケールに応じた形式でフォーマットできます。
日付フォーマット:Intl.DateTimeFormat
Intl.DateTimeFormatを使えば、ユーザーの言語設定や指定したロケールに従って日付を整形できます。
// 現在日時
const now = new Date();
// 日本語(日本)
console.log(new Intl.DateTimeFormat('ja-JP').format(now));
// 英語(アメリカ)
console.log(new Intl.DateTimeFormat('en-US').format(now));
オプションを指定すれば、年月日の表示形式を柔軟に制御できます。
const options = { year: 'numeric', month: 'long', day: 'numeric', weekday: 'long' };
console.log(new Intl.DateTimeFormat('ja-JP', options).format(now));
// 出力例: 2025年9月23日火曜日
時刻フォーマット
時刻も同様にフォーマット可能です。
const options = { hour: '2-digit', minute: '2-digit', second: '2-digit' };
console.log(new Intl.DateTimeFormat('en-GB', options).format(now));
// 出力例: 14:05:09
数値フォーマット:Intl.NumberFormat
数値をロケールに合わせてフォーマットするにはIntl.NumberFormatを使います。
const number = 1234567.89;
// 日本
console.log(new Intl.NumberFormat('ja-JP').format(number));
// 出力: 1,234,567.89
// ドイツ
console.log(new Intl.NumberFormat('de-DE').format(number));
// 出力: 1.234.567,89
通貨フォーマット
通貨記号や位置も自動的にロケールに合わせて表示されます。
const amount = 5000;
console.log(new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' }).format(amount));
// 出力: ¥5,000
console.log(new Intl.NumberFormat('en-US', { style: 'currency', currency: 'USD' }).format(amount));
// 出力: $5,000.00
割合(パーセント)のフォーマット
const rate = 0.256;
console.log(new Intl.NumberFormat('en-US', { style: 'percent', minimumFractionDigits: 2 }).format(rate));
// 出力: 25.60%
実用例:相対時刻の表示
Intl.RelativeTimeFormatを使うと「◯分前」「明日」といった表現も可能です。
const rtf = new Intl.RelativeTimeFormat('ja-JP', { numeric: 'auto' });
console.log(rtf.format(-1, 'day')); // 昨日
console.log(rtf.format(1, 'day')); // 明日
まとめ
Intl APIを使えば、日付や時刻、数値、通貨、割合、相対時刻の表現をロケールに応じて簡単にフォーマットできます。グローバル対応のWebアプリ開発では必須の機能であり、JavaScript標準でサポートされているため追加ライブラリなしで利用可能です。