1. ホーム
  2. ジャバスクリプト

[解決済み】特定のタイムゾーンで日付をフォーマットする

2022-04-08 13:35:03

質問

を使っています。 モーメント.js を使用して、Web アプリで日付の解析と書式設定を行います。JSONオブジェクトの一部として、バックエンドサーバーはUTCエポック(Unixオフセット)からのミリ秒の数値として日付を送信します。

日付のパース 特定のタイムゾーンで RFC 822 のタイムゾーン識別子を文字列の末尾に追加してからパースするだけです。

// response varies according to your timezone
const m1 = moment('3/11/2012 13:00').utc().format("MM/DD HH:mm")

// problem solved, always "03/11 17:00"
const m2 = moment('3/11/2012 13:00 -0400').utc().format("MM/DD HH:mm")

console.log({ m1, m2 })
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

しかし、日付はどのように書けばよいのでしょうか 指定されたタイムゾーンで ?

ブラウザの現在時刻に関係なく一貫した結果を得たいのですが、日付をUTCで表示したくないのです。

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

で指摘されているように 真斗の回答 , .utcOffset() は、Moment 2.9.0 以降で推奨されている方法です。この関数は UTC からの実オフセットを使用し、逆オフセット (例: 夏時間のニューヨークは -240) は使用しません。0400"のようなオフセット文字列は、以前と同じように動作します。

// always "2013-05-23 00:55"
moment(1369266934311).utcOffset(60).format('YYYY-MM-DD HH:mm')
moment(1369266934311).utcOffset('+0100').format('YYYY-MM-DD HH:mm')

古い .zone() セッターとして でした 非推奨 Moment.js 2.9.0に含まれています。これは、タイムゾーン識別子 (例: "-0400" または "-04:00" -4 時間) または分を表す数値を含む文字列を受け付けました。 ビハインド UTC (例: 夏時間中のニューヨークは240)。

// always "2013-05-23 00:55"
moment(1369266934311).zone(-60).format('YYYY-MM-DD HH:mm')
moment(1369266934311).zone('+0100').format('YYYY-MM-DD HH:mm')


数値のオフセットではなく、名前付きのタイムゾーンを扱うには、以下のようにします。 モーメントタイムゾーン を使用し .tz() の代わりに

// determines the correct offset for America/Phoenix at the given moment
// always "2013-05-22 16:55"
moment(1369266934311).tz('America/Phoenix').format('YYYY-MM-DD HH:mm')