2017-08-09 12 views
0

私は、date.jsとmoment-timezone-with-data.min.jsを使用して日付時刻を計算しています。MomentJSタイムゾーンが不正確な日付と時刻を返しています

次のように私が使用していた日付/時刻:

var dGC2018 = moment('2018-04-04T18:00:00').tz("Australia/Queensland"); 

日は時間が午後6時4月2018の第4回です。タイムゾーンはクイーンズランド州です。

出力(使用にconsole.log)は:

Thu Apr 05 2018 04:00:00 GMT+1000 (E. Australia Standard Time) {} 

この出力はconsole.logdCG2018を出力し_d性を見つけるために、返されたオブジェクトを拡張することによって求めることができます。

入力パラメータとの相対的な日付/時刻が間違っているのはなぜですか?

答えて

0

オフセットはおそらくここでは説明されていないと思います。以下のコードを使用してみてください、それはあなたのために働くかどうかを確認し、ニーズに合わせて、dateValueとモーメントタイムゾーンの値を変更します。

var localTimeZoneMoment = moment(dateValue); 
var userTimeZoneMoment = localTimeZoneMoment.clone(); 
userTimeZoneMoment.tz('Australia/Queensland'); 
userTimeZoneMoment.add(localTimeZoneMoment.utcOffset() - userTimeZoneMoment.utcOffset(), 'minutes'); 

var formattedLocalTime = moment.tz(userTimeZoneMoment, 'Australia/Queensland').format('ddd, DD-MMM-YYYY hh:mm a') 
+0

おかげ@VincenzoCは、私はstackoverflowの上に答えるにはかなり新しいです。 – bharathkola

+1

一般に、オフセット調整のために加減算すべきではありません。そうすることで、表現されている時点を移動します。 –

1

あなたはmoment.tzの代わりtz機能を使用する必要があります。 moment.tzは、指定されたタイムゾーン(あなたの場合は'Australia/Queensland')を使用して入力文字列を解析します。

ローカルタイムゾーンを使用して文字列を解析しているので、あなたは間違った出力を得ている(hereが述べたように:デフォルトでは、モーメントが現地時間で解析し、表示さ。)、その後'Australia/Queensland'タイムゾーンに変換します。

さらに、_dなどの内部プロパティを使用してモーメントオブジェクトの値を取得する必要はありません。 momentjs公式ガイドのInternal Properties項で述べたように:

モーメントオブジェクトは_が付いているいくつかの内部特性を有しています。

最も一般的に表示される内部プロパティは、_dプロパティで、MomentがラップするJavaScript Dateを保持します。多くの場合、開発者はコンソール出力の値が_dであると混乱します。モーメントは、エポックシフトというテクニックを使用します。このテクニックは、モーメントが反映する実際の日付の値と異なる場合があります。特にMoment TimeZoneが使用されている場合、このプロパティは、モーメントがpublic .format()関数から出力する実際の値とほぼ同じになることはほとんどありません。そのため、_dの値と_という接頭辞が付いたプロパティは、一切使用しないでください。

モーメントの値をプリントアウトするには、.format(),.toString()または.toISOString()を使用してください。ここでは、作業サンプル

:書式設定の編集のための

var dGC2018 = moment.tz('2018-04-04T18:00:00', "Australia/Queensland"); 
 
console.log(dGC2018.format())
<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>

関連する問題