我已经为此苦恼了一整天,检查了源代码,这似乎是由于强大的JavaScript moment.tz库引起的问题:
每当我传入一个时区标识符"Etc/GMTtime-value"时,返回的moment.tz对象会被乘以-1,我认为这是一个格式("Z")值。
例如:
var pacificTime = moment.tz("2016-09-29 21:00:00","America/Los_Angeles");
pacificTime.format("YYYY-MM-DD HH:mm:ss Z z");
输出结果:"2016-09-29 21:00:00 -07:00 PDT"
这里一切正常。
现在,使用相同的时区(GMT-7):
var GMT_minus_7 = moment.tz("2016-09-29 21:00:00","Etc/GMT-7");
GMT_minus_7.format("YYYY-MM-DD HH:mm:ss Z z");
输出:"2016-09-29 21:00:00+07:00 GMT-7"
粗体值始终是我认为它应该是的负值:传入“Etc/GMT+5”返回“-5:00”的值。
这让我很头疼,因为我正在处理具有日期/时间记录的网页,其中包含一个整数“GMT偏移”值,我只需将其转换为“Etc/GMT” + 偏移值并传递给moment.tz进行时区转换。然后,我需要对该值进行进一步操作(添加天数、显示“Z”格式化值等),但此问题已妨碍了进一步工作。
这是moment.tz解析“Etc/GMT”时区值的缺陷,还是我对时区格式有什么基本误解?
GMT_minus_7.utc().format("YYYY-MM-DD HH:mm:ss Z z")
并得到响应"2016-09-29 14:00:00 +00:00 UTC"UTC转换正确地从21:00减去了7个小时,以给出14:00。因此,对于这种用例,“Z”值的格式可能不正确。 - Perry Pederson.utc()
,因此在此之后的任何内容都将是UTC时间,即+00:00
。 - Matt Johnson-Pint