2017-04-20 12 views
1

私はmomentjsを使用していますが、UTC時刻を特定のタイムゾーン(現在のユーザーにローカルではない)に変換しようとしています。 This SO questionは似ていますが、実際には役に立ちませんでした。MomentJSからローカルだけでなく、希望のタイムゾーンに変換する

私の思考プロセスは、サーバーから受け取った日付でutcモーメントobjを作成し、そのUTC時刻を表示のために特定のタイムゾーンにフォーマットすることです。私は現在、これに近づいてるかの小さなスニペット:

var cutoffString = '20170421 16:30:00'; // in utc 
var utcCutoff = moment.tz(cutoffString, 'YYYYMMDD HH:mm:ss', '+00:00'); 
var displayCutoff = 
     moment.tz(utcCutoff.format('YYYYMMDD HH:mm:ss'), 'YYYYMMDD HH:mm:ss', 'America/New_York'); 

console.log('utcCutoff:', utcCutoff.format('YYYYMMDD hh:mm:ssa Z')); // => utcCutoff: 20170421 04:30:00pm +00:00 
console.log('displayCutoff:', displayCutoff.format('YYYYMMDD hh:mm:ssa Z')); // => displayCutoff: 20170421 04:30:00pm +00:00 

ここでの私の仮定はdisplayCutoffは「アメリカ/ニューヨーク」時間で表示utcCutoff時間になることです。しかし、現在はutcCutoffオブジェクトと同じ時刻に表示されます。また、.tzの代わりに.utc()を使用し、.local()を適用した後にタイムゾーンを操作しようとすると、それもうまくいきませんでした。

ご協力いただきありがとうございます。

+0

[ここ](のhttp:// stackoverflowの.com/q/43113350/4131048)タイムゾーン間の変換モーメントがどのように役立つかの例。 – VincenzoC

答えて

1

入力がUTC文字列であるため、moment.utcを使用できます。 tzを使用すると、モーメントオブジェクトを指定されたタイムゾーンに変換できます。

tz関数は、指定されたゾーンで新しいモーメントオブジェクトを作成する構文解析関数moment.tzを使用している間は、モーメントオブジェクトを指定されたゾーンに変換します。あなたが行うと:

var displayCutoff = 
    moment.tz(utcCutoff.format('YYYYMMDD HH:mm:ss'), 'YYYYMMDD HH:mm:ss', 'America/New_York'); 

をあなたは'America/New_York'utcCutoffを変換されていませんが、あなたはニューヨークで20170421 16:30:00ための新しい瞬間オブジェクトを構築しています。ここで

あなたのコードの更新されたバージョン:

var cutoffString = '20170421 16:30:00'; // in utc 
 
var utcCutoff = moment.utc(cutoffString, 'YYYYMMDD HH:mm:ss'); 
 
var displayCutoff = utcCutoff.clone().tz('America/New_York'); 
 

 
console.log('utcCutoff:', utcCutoff.format('YYYYMMDD hh:mm:ssa Z')); // => utcCutoff: 20170421 04:30:00pm +00:00 
 
console.log('displayCutoff:', displayCutoff.format('YYYYMMDD hh:mm:ssa Z')); // => displayCutoff: 20170421 12:30:00pm -04:00
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.11/moment-timezone-with-data-2010-2020.min.js"></script>

+1

これは私が必要としていたものです。私が注目したことの1つは、私がtime-timezone 0.5.13のために指していたcdnにはデータが含まれていなかったため、あなたの解決策ではUTCで時刻が表示されていたということです。最新のパックされたデータを追加したとき、サンプルのように機能しました。 – rdrw

0

モーメントのタイムゾーンのプラグインが必要な正確に何である:http://momentjs.com/timezone/

var dec = moment("2014-12-01T12:00:00Z"); 
dec.tz('America/New_York').format('ha z'); // 5am PDT 
関連する問題