moment.js UTCが常に間違った日付を表示するのはなぜですか。たとえば、Chromeの開発者コンソールから:
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()
私は取り戻す「2013年7月18日」 moment.js UTCを使用しているとき、私も期待するものです。
これは、moment.js UTCを使用するときに正しい日付を取得できないことを意味しますか?
デフォルトでは、MomentJSは現地時間で解析します。日付文字列(時間なし)のみが指定されている場合、時間のデフォルトは午前0時です。
コードでは、ローカル日付を作成し、それをUTCタイムゾーンに変換します(実際には、インスタンスがUTCモードに切り替わります)。そのため、フォーマットされると、(ローカル時刻に応じて)前方にシフトされます。後方。
ローカルタイムゾーンがUTC + N(Nは正の数)で、日付のみの文字列を解析すると、前の日付が取得されます。
これを示すいくつかの例を次に示します(私の現地時間のオフセットは、夏時間中は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"
または、マットジョンソンが彼の回答で述べているように、あいまいさを防ぐために、最初にそれをUTC日付として解析し、2番目の引数としてフォーマット文字列を含めることができます(おそらくそうする必要があります)moment.utc()
。
>>> 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"
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加