我正在解析这样的日期。时刻的地点设置为德国:
moment("2030-12-31T23:59:59.000Z")
然而,当我打印它时,它将在第二天选择:
moment("2030-12-31T23:59:59.000Z").format('L')
-> "01.01.2031"
这就是解析后对象看起来的样子,以及我们可以清楚地看到解析日期是正确的:
Moment {_isAMomentObject: true, _i: "2030-12-31T23:59:59.000Z", _f: "YYYY-MM-DDTHH:mm:ss.SSSSZ", _tzm: 0, _isUTC: false, …}
_d
:
Wed Jan 01 2031 00:00:00 GMT+0100 (CET) {}
_f
:
"YYYY-MM-DDTHH:mm:ss.SSSSZ"
_i
:
"2030-12-31T23:59:59.000Z"
_isAMomentObject
:
true
_isUTC
:
false
_isValid
:
true
_locale
:
Locale {_calendar: {…}, _longDateFormat: {…}, _invalidDate: "Invalid date", _ordinal: "%d.", _ordinalParse: /\d{1,2}\./, …}
_pf
:
charsLeftOver
:
0
empty
:
false
invalidFormat
:
false
invalidMonth
:
null
iso
:
true
meridiem
:
undefined
nullInput
:
false
overflow
:
-1
parsedDateParts
:
(7) [2030, 11, 31, 23, 59, 59, 0]
unusedInput
:
[]
unusedTokens
:
[]
userInvalidated
:
false
__proto__
:
Object
_tzm
:
0
__proto__
:
Object
有趣的是,我正在以完全相同的方式解析2-3个日期(大部分1月1日)并且它们工作正常!
我认为这不是UTC的事情。
这里发生了什么?
答案 0 :(得分:1)
您的输入以Z
结尾,因此被视为UTC。
改为使用moment.utc
:
默认情况下,时刻会以当地时间进行分析和显示。
如果您想以UTC格式解析或显示片刻,可以使用
moment.utc()
代替moment()
moment.locale('de');
var m1 = moment.utc("2030-12-31T23:59:59.000Z").format('L');
console.log(m1);
var m2 = moment("2030-12-31T23:59:59.000Z").format('L');
console.log(m2);

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.20.1/moment-with-locales.min.js"></script>
&#13;