我的时刻对象不会转换时区。我试图将日期和时间对象转换为UTC,但它只返回原始日期/时间而没有任何变化。有谁知道为什么会这样?看起来它可能假设原始时间为UTC,即使它不是根据_d?
momentPre = moment(post.date + " " + post.time + "00", "YYYY-M-D HH:mm:ss")
momentAft = momentPre.toISOString()
momentParse = moment.tz(momentAft, 'America/Denver')
post.utcDate = momentParse.clone().tz("UTC")._i.substring(0,10)
momentParse对象输出(_isUTC返回true,即使它不是。我在测试之前强制将其设为false并且没有解决问题):
{ [Number: 1506010200000]
_isAMomentObject: true,
_i: '2017-09-21T16:10:00.000Z',
_f: 'YYYY-MM-DDTHH:mm:ss.SSSSZ',
_tzm: 0,
_isUTC: true,
_pf:
{ empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -1,
charsLeftOver: 0,
nullInput: false,
invalidMonth: null,
invalidFormat: false,
userInvalidated: false,
iso: true },
_locale: Locale { ordinal: [Function], _abbr: 'en' },
_a: [ 2017, 8, 21, 16, 10, 0, 0 ],
_d: Thu Sep 21 2017 04:10:00 GMT-0600 (MDT),
_z:
{ name: 'America/Denver',
abbrs
...
来自momentParse.clone()的输出.tz(" UTC")
{ [Number: 1506010200000]
_isAMomentObject: true,
_i: '2017-09-21T16:10:00.000Z',
_f: 'YYYY-MM-DDTHH:mm:ss.SSSSZ',
_tzm: 0,
_isUTC: true,
_offset: 0,
_pf:
{ empty: false,
unusedTokens: [],
unusedInput: [],
overflow: -1,
charsLeftOver: 0,
nullInput: false,
invalidMonth: null,
invalidFormat: false,
userInvalidated: false,
iso: true },
_locale: Locale { ordinal: [Function], _abbr: 'en' },
_z:
{ name: 'UTC',
abbrs: [ 'UTC' ],
untils: [ Infinity ],
offsets: [ 0 ] },
_a: [ 2017, 8, 21, 16, 10, 0, 0 ],
_d: Thu Sep 21 2017 10:10:00 GMT-0600 (MDT) }
答案 0 :(得分:0)
它正在工作,你只是错误的日期。
而不是momentObj._i.substring(0,10)
您应该使用momentObj.format()
方法。
const now = moment()
now.tz('UTC').format()
# 2017-09-22T04:39:58Z
now.clone().tz('Europe/Kiev').format()
# 2017-09-22T07:39:58+03:00
now.clone().tz('America/Denver').format()
# 2017-09-21T22:39:58-06:00
这是source code。
已添加:仅当您希望.clone()
保持不变时才需要使用now
,否则您只能执行now.tz(...).format(...)
。