datetimepicker.js を使用しており、そのdate
関数は moment.js オブジェクトを返します。ローカルUTCオフセットを使用してこれを行いますが、元の日付には異なるオフセットがあります。
私の元の日付:
2015-10-01T15:00:00.000Z
日付時刻ピッカーに表示するもの(DD-MM HH:mm
):
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
形式を明示的に指定する必要があります。
これを試して:
momentDate.format('YYYY-MM-DDTHH:mm:ss')
これは結果を与えます
2015-10-01T15:40:00
ユーザーに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
を呼び出すか、結果に任意の名前を付けます。元の瞬間がクローン with moment(m)
であり、オフセットが失われず、UTCへの切り替えがピッカーの内部動作を妨げないことに注意してください。
また、このようなshiftingは一般にハックであり、間違って実行するとエラーが発生する可能性があることに注意してください。調整が適用される時点はすでにUTCモードであるため、ここでは問題ありません。しかし、一般的な解決策として、シフトは避ける必要があります。最適なオプションは、最初にコントロールをUTCモードに設定することです。
これを試して:
let str = '2015-10-01T15:40+01:00';
let moment = moment(str).utcOffset(str)
console.log(moment.format('DD/MM/YYYY HH:mm'))
<script src="https://momentjs.com/downloads/moment.js"></script>
これは私のために働いた:
_let date = "2017-02-01 15:20:00.00";
let pattern = "YYYY-MM-DD HH:mm:ss.SS"
let d = moment(date, pattern).utc(false);
_
それはまだタイムゾーンを考慮したと言うでしょうが、私はそうではないと思います。
_LOG: 'ParseDateStr::2017-2-1 15:20:00.0000000
ParsedDate::Wed Feb 01 2017 15:20:00 GMT+0100 (Central European Standard Time)'
_
通常、moment(date, pattern)
だけで_16:20:00
_として解析されます
きれいな解決策ではないが、あなたはできる
momentDate.format('YYYY-MM-DDTHH:mm:ss') + '00:00';
これにより、タイムゾーンが削除され、「00:00」の部分が追加されます。これは、Mattの答えを拡張するためです。
それはあなたに与えるでしょう
2015-10-01T15:40:00 + 00:00
可能な限りシンプル:
let str = "2018-03-20T16:29:35-03:00";
let res = str.substring(0, 19); //2018-03-20T16:29:35
let hi = moment(res).format('LLL')
console.log(hi) //20 de Março de 2018 às 16:29