2015-12-02 6 views
14

私はdatetimepicker.jsを使用しており、そのdate関数はmoment.jsオブジェクトを返します。これは、ローカルのUTCオフセットを使用して行い、元の日付は異なるオフセットを持ちます。moment.jsオブジェクトからタイムゾーンを削除する

私の元の日付:

私は、日付時刻ピッカー( DD-MM HH:mm)に表示何
2015-10-01T15:00:00.000Z 

:私は何を得る

01-10 15:00 

:私が欲しいもの

2015-10-01T15:40:00+01:00 

2015-10-01T15:40:00+00:00 

最後に+01オフセットを削除した方法に注意してください。

どのようにローカルUTCに適用することができますか?これは、01を手動で削除する必要なしに(ユーザーの場所に応じて他のローカルオフセットにすることができるため)。

var momentDate = timePicker.data("DateTimePicker").date(); 
console.log(momentDate.format()); 
//this prints 2015-10-01T15:40:00+01:00 
+0

あなたには、いくつかのコードやバイオリンのを提供してもらえ実証する?これは非常に簡単ですが、このdatetimepickerコントロールで使用しているAPIについてはわかりません。 –

答えて

14

ユーザーにUTCベースの日付と時刻を選択させようとしているようです。したがって、ピッカーが最初に瞬間を作成するときにUTCモードで動作させるのが最善の方法です。私はこの特定のDateTimePickerに慣れていないんだけど、どこか想定し、内部的にはこのようなものはない。次に

var m = moment([year, month-1, day, hour, minute]); 

は、代わりにこれを行う必要がありますされています。ここに示した

var m = moment.utc([year, month-1, day, hour, minute]); 

(変数が来ることになります

理想的には、ピッカーコントロールには、UTCモードを設定する機能が含まれている必要があります。これにより、内部でこれを行うことができます。

このような機能がない場合でも、自分で補正することはできます。残念ながら、.utc()に電話することはできません。これは、ユーザーが選択した時刻とは異なる時刻になるためです。したがって、UTC時間を元の瞬間のオフセットでシフトすることによって補正する必要があります。

var m = // moment value from the picker 
var result = moment(m).utc().add(m.utcOffset(), 'm'); 

その後、formatを呼び出すことができます。また、その結果に望むものは何でも。元の瞬間はmoment(m)であり、オフセットが失われず、UTCへの切り替えがピッカーの内部動作を妨げないように注意してください。

また、シフトのように、これは一般的にハックであり、間違っているとエラーにつながることに注意してください。調整が適用されるとき、瞬間はすでにUTCモードになっているので、ここでは大丈夫です。しかし、一般的な解決策として、シフトは避けなければならない。最良の選択肢は、コントロールをUTCモードにしてから始めることです。

+0

私の場合、 'var result = moment(m).add(m.utcOffset()、 'm')。utc();'を使用した場合にのみ機能しました。もしutc()がaddの前にあれば、utcOffsetは何も出力しません。 – TheFullResolution

+0

@ TheFullResolution - おそらくあなたは 'moment(m).utc()の代わりに' m.utc()。 。 –

+0

あなたは正しい、私の間違い – TheFullResolution

12

フォーマットを明示的に指定する必要があります。

これを試してみてください:

momentDate.format('YYYY-MM-DDTHH:mm:ss') 

これは結果を与えるよう

2015-10-01T15:40:00

関連する問題