112

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-07-18」が返されます。これは、moment.js UTC を使用するときに期待するものでもあります。

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

4

3 に答える 3

41

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

指定した形式で入力時刻を UTC として解析する正しい方法は次のようになります。

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

このドキュメントを参照してください。

出力用に別の形式にしたい場合は、次のようにします。

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

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

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

于 2013-07-25T13:24:08.403 に答える
1

これを使って :

return moment.utc(new Date(oData.CreatedAtUtc), 'MM/DD/YYYY h:mm A').local().format("YYYY-MM-DD HH:mm") + ' (' + timezoneAbbr + ')';
于 2021-07-06T03:35:41.023 に答える