JavaScriptで日付を別のタイムゾーンに変換する方法
JavaScriptで日付を別のタイムゾーンに変換する方法
Dateオブジェクトを使用する
JavaScriptには、日付と時刻を扱うためのDate
オブジェクトが用意されています。このオブジェクトには、様々なメソッドが用意されており、タイムゾーン変換も可能です。
具体的な手順は以下の通りです。
- 変換したい日付を
Date
オブジェクトに変換します。 getTimezoneOffset()
メソッドを使用して、現在のタイムゾーンのオフセットを取得します。- 変換先のタイムゾーンのオフセットを計算します。
- オフセットの差をミリ秒に変換し、
setDate()
メソッドを使用して日付を調整します。 toLocaleString()
メソッドを使用して、目的のフォーマットで文字列に変換します。
const targetDate = new Date('2024-06-25T10:20:30'); // 変換したい日付
const currentOffset = targetDate.getTimezoneOffset(); // 現在のタイムゾーンのオフセット (分単位)
const targetTimezoneOffset = -720; // 変換先のタイムゾーンのオフセット (分単位) ※ 例:アメリカ東部標準時 (EDT) は -5 * 60 = -300
const offsetDiff = targetTimezoneOffset - currentOffset; // オフセットの差 (分単位)
const adjustedDate = new Date(targetDate.getTime() + offsetDiff * 60 * 1000); // オフセットを適用した日付
const formattedDate = adjustedDate.toLocaleString(); // 目的のフォーマットで文字列化
console.log(formattedDate); // 2024-06-24T23:20:30 (アメリカ東部標準時)
Moment.jsなどのライブラリを使用すると、より簡単に日付の変換を行うことができます。これらのライブラリは、タイムゾーンに関する様々な機能を提供しており、Dateオブジェクトよりも直感的に操作することができます。
Moment.jsを使用する場合は、以下の手順で日付を変換することができます。
- Moment.jsライブラリをプロジェクトに導入します。
tz()
メソッドを使用して、変換先のタイムゾーンを指定します。
const moment = require('moment'); // Moment.jsライブラリの読み込み
const targetDate = moment('2024-06-25T10:20:30'); // 変換したい日付
const targetTimezone = 'America/New_York'; // 変換先のタイムゾーン
const formattedDate = targetDate.tz(targetTimezone).format('YYYY-MM-DD HH:mm:ss');
console.log(formattedDate); // 2024-06-24T23:20:30 (アメリカ東部標準時)
注意点
- JavaScriptで日付を別のタイムゾーンに変換する場合、サマータイムの影響を考慮する必要があります。サマータイムが適用されている期間は、オフセットが異なる場合があります。
- Moment.jsなどのライブラリを使用する場合は、ライブラリのバージョンによって機能が異なる場合があります。最新バージョンのライブラリを使用することをおすすめします。
上記以外にも、様々な方法で日付を別のタイムゾーンに変換することができます。ご自身の目的に合った方法を選択してください。
JavaScriptで日付を別のタイムゾーンに変換するサンプルコード
Dateオブジェクトを使用する
// 変換したい日付
const targetDate = new Date('2024-06-25T10:20:30');
// 現在のタイムゾーンのオフセット (分単位)
const currentOffset = targetDate.getTimezoneOffset();
// 変換先のタイムゾーンのオフセット (分単位) ※ 例:アメリカ東部標準時 (EDT) は -5 * 60 = -300
const targetTimezoneOffset = -720;
// オフセットの差 (分単位)
const offsetDiff = targetTimezoneOffset - currentOffset;
// オフセットを適用した日付
const adjustedDate = new Date(targetDate.getTime() + offsetDiff * 60 * 1000);
// 目的のフォーマットで文字列化
const formattedDate = adjustedDate.toLocaleString();
console.log(formattedDate); // 2024-06-24T23:20:30 (アメリカ東部標準時)
Moment.jsライブラリを使用する
// Moment.jsライブラリの読み込み
const moment = require('moment');
// 変換したい日付
const targetDate = moment('2024-06-25T10:20:30');
// 変換先のタイムゾーン
const targetTimezone = 'America/New_York';
// 目的のフォーマットで文字列化
const formattedDate = targetDate.tz(targetTimezone).format('YYYY-MM-DD HH:mm:ss');
console.log(formattedDate); // 2024-06-24T23:20:30 (アメリカ東部標準時)
- 上記のコードは、あくまで一例です。ご自身の目的に合わせて、コードを修正してください。
- Moment.jsライブラリを使用する場合は、ライブラリのインストールが必要です。インストール方法は、ライブラリの公式ドキュメントを参照してください。
JavaScriptで日付を別のタイムゾーンに変換するその他の方法
Intl APIは、国際化に関連する機能を提供するAPIです。このAPIには、日付を別のタイムゾーンに変換するための機能も含まれています。
const targetDate = new Date('2024-06-25T10:20:30'); // 変換したい日付
const formattedDate = targetDate.toLocaleDateString('ja-JP', { timeZone: 'America/New_York' });
console.log(formattedDate); // 2024年6月24日 (アメリカ東部標準時)
Luxonを使用する
Luxonは、Moment.jsに代わる人気のあるタイムゾーンライブラリです。Moment.jsよりも使いやすく、機能も豊富です。
const { DateTime } = require('luxon'); // Luxonライブラリの読み込み
const targetDate = DateTime.fromJSDate(new Date('2024-06-25T10:20:30')); // 変換したい日付
const targetTimezone = 'America/New_York'; // 変換先のタイムゾーン
const formattedDate = targetDate.setZone(targetTimezone).toString();
console.log(formattedDate); // 2024-06-24T23:20:30 (アメリカ東部標準時)
Day.jsを使用する
Day.jsは、Moment.jsと似た構文を持つ軽量なタイムゾーンライブラリです。
const Day = require('dayjs'); // Day.jsライブラリの読み込み
const targetDate = Day('2024-06-25T10:20:30'); // 変換したい日付
const targetTimezone = 'America/New_York'; // 変換先のタイムゾーン
const formattedDate = targetDate.tz(targetTimezone).format('YYYY-MM-DD HH:mm:ss');
console.log(formattedDate); // 2024-06-24T23:20:30 (アメリカ東部標準時)
javascript timezone