JavaScript で日付を別のタイムゾーンに変換する 質問する

JavaScript で日付を別のタイムゾーンに変換する 質問する

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

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

  • 日付 (形式: "2012/04/10 10:10:30 +0000")
  • タイムゾーン文字列 ("Asia/Jakarta")

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

これを行う簡単な方法はありますか?

ベストアンサー1

ワンライナーは次のとおりです。

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リファレンス

注意: 上記の関数は、en-USロケールでフォーマットされた日付の文字列 ( ) である toLocaleString の結果の解析に依存して動作します"4/20/2012, 5:10:30 PM"。各ブラウザは、en-USDate コンストラクターにフォーマットされた日付文字列を受け入れない場合があり、予期しない結果を返す可能性があります (夏時間を無視する場合があります)。

現在、すべての最新ブラウザはこの形式を受け入れ、夏時間を正しく計算しますが、古いブラウザや特殊なブラウザでは動作しない可能性があります。

補足: 最近のブラウザに toLocaleDate 関数があれば、このハッキーな回避策を使わなくても済むので便利です。

おすすめ記事