JavaScript日付フォーマット解説
JavaScript で日付をフォーマットする方法
JavaScript では、日付オブジェクトを様々な形式で表示するために、いくつかの方法があります。
基本的な方法
toISOString()
: ISO 8601 形式の文字列を返します。toLocaleTimeString()
: ローカル設定に基づいた時刻の文字列を返します。new Date()
: 現在の日時を取得します。
const now = new Date();
console.log(now.toLocaleDateString()); // 例: 2024/08/16
console.log(now.toLocaleTimeString()); // 例: 18:50:58
console.log(now.toISOString()); // 例: 2024-08-17T02:50:58.123Z
カスタムフォーマット
Intl.DateTimeFormat()
: より細かい制御ができる日付フォーマットオブジェクトです。
const options = { year: 'numeric', month: '2-digit', day: '2-digit' };
const formatter = new Intl.DateTimeFormat('ja-JP', options);
const formattedDate = formatter.format(new Date());
console.log(formattedDate); // 例: 2024/08/16
独自関数によるフォーマット
- 特殊なフォーマットが必要な場合は、自分で関数を定義することもできます。
function formatDate(date) {
const year = date.getFullYear();
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
return `${year}/${month}/${day}`;
}
const formattedDate = formatDate(new Date());
console.log(formattedDate); // 例: 2024/08/16
注意点
- 独自のフォーマット関数を作成する場合は、ゼロパディングや桁数調整などに注意が必要です。
Intl.DateTimeFormat()
を使用すると、より正確なロケール指定やフォーマットのカスタマイズができます。toLocaleDateString()
やtoLocaleTimeString()
の結果は、ユーザーのロケール設定によって異なる場合があります。
const now = new Date();
console.log(now.toLocaleDateString()); // 例: 2024/08/16
console.log(now.toLocaleTimeString()); // 例: 18:50:58
console.log(now.toISOString()); // 例: 2024-08-17T02:50:58.123Z
toISOString()
: ISO 8601 形式の文字列を返します。これは国際標準の日時表現で、YYYY-MM-DDTHH:mm:ss.sssZ の形式になります。new Date()
: 現在の日時を表すDate
オブジェクトを作成します。
const options = { year: 'numeric', month: '2-digit', day: '2-digit' };
const formatter = new Intl.DateTimeFormat('ja-JP', options);
const formattedDate = formatter.format(new Date());
console.log(formattedDate); // 例: 2024/08/16
formatter.format(new Date())
: 指定したオプションとロケール (ja-JP
) に基づいて日付をフォーマットします。options
オブジェクト: フォーマットのオプションを指定します。year
: 年の表示形式 ('numeric', '2-digit' など)
Intl.DateTimeFormat()
: より柔軟な日付フォーマットを作成するためのコンストラクタです。
function formatDate(date) {
const year = date.getFullYear();
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
return `${year}/${month}/${day}`;
}
const formattedDate = formatDate(new Date());
console.log(formattedDate); // 例: 2024/08/16
- テンプレートリテラル (
${}
) を使って、年、月、日をスラッシュで結合して文字列を作成します。 ('0' + (date.getMonth() + 1)).slice(-2)
: 月を 2 桁の文字列に変換します。getFullYear()
,getMonth()
,getDate()
: 日付オブジェクトから年、月、日を取得します。formatDate
関数: 日付オブジェクトを受け取り、指定したフォーマットの文字列を返します。
代替方法
toDateString() と toTimeString()
- しかし、これらのメソッドはブラウザによってフォーマットが異なるため、信頼性が低い場合があります。
toDateString()
は日付部分を、toTimeString()
は時刻部分を文字列として返します。
const now = new Date();
console.log(now.toDateString()); // 例: Mon Aug 12 2024
console.log(now.toTimeString()); // 例: 18:52:52 GMT-0700 (Pacific Daylight Time)
手動フォーマット
- 柔軟性がありますが、コードが冗長になる可能性があります。
- 日付オブジェクトのメソッド (
getFullYear()
,getMonth()
,getDate()
, など) を使用して、日付の各部分を抽出し、自分で文字列を組み立てます。
function formatDate(date) {
const year = date.getFullYear();
const month = ('0' + (date.getMonth() + 1)).slice(-2);
const day = ('0' + date.getDate()).slice(-2);
return `${year}-${month}-${day}`;
}
const formattedDate = formatDate(new Date());
console.log(formattedDate); // 例: 2024-08-12
ライブラリ利用
- 例えば、Moment.js や Luxon などのライブラリがあります。
- 日付フォーマット専用のライブラリを使用することで、複雑なフォーマットやタイムゾーン処理を簡略化できます。
// Moment.js の例
const moment = require('moment');
const formattedDate = moment().format('YYYY-MM-DD');
console.log(formattedDate); // 例: 2024-08-12
どの方法を選ぶか
- 互換性を重視する場合は、
Intl.DateTimeFormat()
が推奨されます。 - 複雑なフォーマットや タイムゾーン処理が必要な場合は、ライブラリを利用することを検討してください。
- シンプルなフォーマットで、ブラウザの挙動に依存しない場合は、手動フォーマットや
Intl.DateTimeFormat()
が適しています。
注意
- ライブラリを使用する場合は、ライブラリの依存関係やパフォーマンスに注意が必要です。
- 手動フォーマットはコードが冗長になりがちです。
toDateString()
とtoTimeString()
はブラウザによって異なる結果を返す可能性があるため、一般的には推奨されません。
javascript date date-formatting