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




1 Answers

デフォルトでは、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"
月初 期間

なぜ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を使用しているときに正しい日付を取得できないということですか?




Related

javascript datetime timezone momentjs