日付と時刻のフォーマット
曖昧な数字の代わりにローカライズされた日付を表示する
問題
生の日付(10/12/2025など)を表示すると、曖昧になります。米国のユーザーは10月12日と見なしますが、英国のユーザーは12月10日と見なします。単一のフォーマット(例:「Oct 12, 2025」)をハードコーディングすると、異なる地域のユーザーにとって不自然または読みにくい体験になります。
解決策
react-intlのようなライブラリから専用のフォーマットコンポーネントを使用します。FormattedDateのようなコンポーネントは、プロバイダーから現在の言語を自動的に読み取ります。Dateオブジェクトを、ユーザーの言語ルールに従って正しく人間が読める文字列にフォーマットし、順序、区切り文字、月名を処理します。
手順
1. 日付用のクライアントコンポーネントを作成する
react-intlコンポーネントはIntlProviderを必要とするため、クライアントコンポーネント内で使用する必要があります。
フォーマットされた日付を表示する新しいコンポーネントapp/components/PostDetails.tsxを作成します。
// app/components/PostDetails.tsx
'use client';
import { FormattedDate } from 'react-intl';
type Props = {
publishDate: Date;
};
export default function PostDetails({ publishDate }: Props) {
return (
<div>
Posted on:
<FormattedDate
value={publishDate}
dateStyle="long"
timeStyle="short"
/>
</div>
);
}
このコンポーネントは、Dateオブジェクトをプロップとして受け取ります。次に、FormattedDateを使用してレンダリングします。
2. フォーマットオプションを渡す
FormattedDateコンポーネントは、出力を制御するオプションを受け入れます。上記の例では:
valueは、フォーマットするDateオブジェクトです。dateStyle="long"は、「2025年12月10日」のようなフォーマットを要求します。その他のオプションには、「full」、「medium」、「short」があります。timeStyle="short"は、「午後3:00」のようなフォーマットを要求します。
3. ページでコンポーネントを使用する
これで、ホームページなど任意のページで新しいコンポーネントを使用できます。
// app/[lang]/page.tsx
import PostDetails from '@/app/components/PostDetails';
export default function Home() {
// This could come from a database or API
const myPostDate = new Date('2025-12-10T15:00:00Z');
return (
<div>
<h1>My blog post</h1>
<PostDetails publishDate={myPostDate} />
<p>This is the content of the post...</p>
</div>
);
}
/enにアクセスしたユーザーには「Posted on: December 10, 2025 at 3:00 PM」と表示されます。/esにアクセスしたユーザーには「Posted on: 10 de diciembre de 2025, 15:00」と表示されます。