2017-07-10 14 views
0

選択したタイムゾーンに基づいて日付を変換しようとしていました。私は時間差が5分の日付で同じ結果を見るのに驚いた。 EXのために 、moment.tzが間違った結果を出しています

var x = "2017-07-10T18:30:00.000Z" 
var y = "2017-07-10T18:35:00.000Z" 
var z = "2017-07-10T18:45:00.000Z" 

とmoment.tzを使用してそれらを変換してみました:

moment.tz(x, 'America/New_York').format('DD/MM/YYYY HH:MM:SS'); 
moment.tz(y, 'America/New_York').format('DD/MM/YYYY HH:MM:SS') 
moment.tz(z, 'America/New_York').format('DD/MM/YYYY HH:MM:SS') 

驚いたことに、結果はすべての3が"10/07/2017 14:07:00"であるために同じでした。 どうしたのですか?どんな助けもありがとう。

答えて

2

短い答え:

問題があなたの代わりにあなたformat()で小文字mm分の大文字MM(月)を使用しているということです。 SS(分数秒)とss(秒)と同じ問題があることに注意してください。


一般的なノートあなたについてのコードサンプル:

使用moment.tz与えられた時間帯(例えば'America/New_York')を使用して、時刻文字列を解析するため、moment.tzは、与えられた時間帯に入力を変換するために作られていません。

モーメントオブジェクトを特定のタイムゾーンに変換するには、tz()メソッドを使用する必要があります。

入力文字列は、Zで終わるので、時刻はUTCで表されます。


マット・ジョンソンは、入力文字列が(UTCタイムゾーンのためのまま)Zが含まれているため、あなたのケースでも、moment.tz(input, zone)が与えられたゾーンへの入力を変換します、コメントで指摘したように。とにかく、このようなアプローチはお勧めできません。ここ


コードサンプルparses UTC時間文字列と'America/New_York'タイムゾーンに変換する:

var x = "2017-07-10T18:30:00.000Z"; 
 
var y = "2017-07-10T18:35:00.000Z"; 
 
var z = "2017-07-10T18:45:00.000Z"; 
 

 
console.log(moment.utc(x).tz('America/New_York').format('DD/MM/YYYY HH:MM:SS')); 
 
console.log(moment.utc(y).tz('America/New_York').format('DD/MM/YYYY HH:mm:ss')); 
 
console.log(moment.utc(z).tz('America/New_York').format('DD/MM/YYYY HH:mm:ss'));
<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.13/moment-timezone-with-data-2012-2022.min.js"></script>

+1

WOW。素晴らしい答え。迅速かつ精巧な答えをありがとう。 –

+0

console.logの出力からどのようにxに戻ることができますか?逆のメカニズムはありますか? –

+1

実際には、入力に 'Z'が含まれているので、実際にはUTCとして扱われ、' moment.tz(input、zone) 'だけで変換されます。ただ、Zを落とすと振る舞いが変わるので、やはりあなたのアプローチに変わりはありません。 :) –

関連する問題