1. ホーム
  2. javascript

[解決済み] JavaScriptで日付を別のタイムゾーンに変換する

2022-03-23 12:37:48

質問

あるタイムゾーンの日付を別のタイムゾーンに変換する関数を探しています。

2つのパラメータが必要です。

  • 日付 (フォーマット "2012/04/10 10:10:30 +0000")
  • タイムゾーン文字列 ("Asia/Jakarta")

タイムゾーンの文字列は http://en.wikipedia.org/wiki/Zone.tab

簡単にできる方法はありますか?

どのように解決するのですか?

これがワンライナーです。

function convertTZ(date, tzString) {
    return new Date((typeof date === "string" ? new Date(date) : date).toLocaleString("en-US", {timeZone: tzString}));   
}

// usage: Asia/Jakarta is GMT+7
convertTZ("2012/04/20 10:10:30 +0000", "Asia/Jakarta") // Tue Apr 20 2012 17:10:30 GMT+0700 (Western Indonesia Time)

// Resulting value is regular Date() object
const convertedDate = convertTZ("2012/04/20 10:10:30 +0000", "Asia/Jakarta") 
convertedDate.getHours(); // 17

// Bonus: You can also put Date object to first arg
const date = new Date()
convertTZ(date, "Asia/Jakarta") // current date-time in jakarta.

   

これは MDNリファレンス .

注意:上の関数は、toLocaleStringの結果をパースすることによって動作します。 en-US ロケール、例えば "4/20/2012, 5:10:30 PM" . 各ブラウザは en-US 形式の日付文字列をDateコンストラクタに渡すと、予期しない結果 (サマータイムを無視する可能性) が返されることがあります。

現在のところ、すべてのモダンブラウザがこのフォーマットを受け入れ、夏時間を正しく計算します。

<ブロッククオート

余談: モダンブラウザに toLocaleDate があれば最高なのですが。 関数を使用すれば、このような面倒な回避策をとる必要はありません。