javascript - 期間 - moment.js-UTCの日付が間違っています




utcoffset moment (2)

なぜmoment.js UTCは常に間違った日付を表示しますか? たとえば、クロームの開発者コンソールから:

moment(('07-18-2013')).utc().format("YYYY-MM-DD").toString()
// or
moment.utc(new Date('07-18-2013')).format("YYYY-MM-DD").toString()

両方とも"2013-07-17"を返しますなぜ18 日でなく17日に戻ってきたのですか?

しかし、私がutcなしでmomentjsを使用する場合:

moment(new Date('07-18-2013')).format("YYYY-MM-DD").toString()

私はmoment.js UTCを使用しているときに期待している"2013-07-18"を取り戻します。

これは、moment.js UTCを使用しているときに正しい日付を取得できないということですか?

https://code.i-harness.com


Datemoment両方は、デフォルトでブラウザのローカルタイムゾーンで入力文字列を解析します。 しかし、 Dateは時にはこの点に矛盾します。 文字列がYYYY-MM-DDハイフンを使用している場合、またはYYYY-MM-DD HH:mm:ss場合は、 現地時間と解釈します。 Dateとは異なり、 momentは常にどのように解析されるかについて一貫しています。

あなたが入力した形式で入力瞬間をUTCとして解析する正しい方法は次のようになります:

moment.utc('07-18-2013', 'MM-DD-YYYY')

moment.utc()参照しmoment.utc()ください。

出力用に別のフォーマットを行う場合は、次のようにします。

moment.utc('07-18-2013', 'MM-DD-YYYY').format('YYYY-MM-DD')

toString明示的に呼び出す必要はありません。

入力形式を提供することは非常に重要であることに注意してください。 それがなければ、 01-04-2013ような日付は、ブラウザの文化設定に応じて、1月4日または4月1日のいずれかに処理される可能性があります。


デフォルトでは、MomentJSは現地時間で解析します。 日付文字列(時間なし)のみが指定されている場合、時刻のデフォルトは深夜です。

コードでは、ローカル日付を作成し、それをUTCタイムゾーンに変換します(実際にはモーメントインスタンスがUTCモードに切り替わります )。フォーマットされると、ローカルタイムに応じてシフトされます。後方に。

ローカルタイムゾーンがUTC + N(Nは正の数)で、日付のみの文字列を解析すると、前の日付が取得されます。

ここにそれを説明するいくつかの例があります(私のローカルタイムオフセットはDST中のUTC + 3です):

>>> moment('07-18-2013', 'MM-DD-YYYY').utc().format("YYYY-MM-DD HH:mm")
"2013-07-17 21:00"
>>> moment('07-18-2013 12:00', 'MM-DD-YYYY HH:mm').utc().format("YYYY-MM-DD HH:mm")
"2013-07-18 09:00"
>>> Date()
"Thu Jul 25 2013 14:28:45 GMT+0300 (Jerusalem Daylight Time)"

UTCと解釈される日付/時刻文字列が必要な場合は、明示的に指定する必要があります。

>>> moment(new Date('07-18-2013 UTC')).utc().format("YYYY-MM-DD HH:mm")
"2013-07-18 00:00"

マット・ジョンソンが答えているように、最初にmoment.utc()を使ってUTCの日付として解析することができます( おそらくそうでなければなりません moment.utc()そしてあいまいさを防ぐためにフォーマット文字列を第2引数として含みます。

>>> moment.utc('07-18-2013', 'MM-DD-YYYY').format("YYYY-MM-DD HH:mm")
"2013-07-18 00:00"

UTCの日付をローカル日付に変換するには、次のようにlocal()メソッドを使用します。

>>> moment.utc('07-18-2013', 'MM-DD-YYYY').local().format("YYYY-MM-DD HH:mm")
"2013-07-18 03:00"




momentjs