gpt4 book ai didi

javascript - 设置 "Etc/GMT[+|-]HH:MM"时区的 moment.tz 问题

转载 作者:行者123 更新时间:2023-12-03 19:44:58 25 4
gpt4 key购买 nike

一天多来我一直在努力解决这个问题,进入源代码,这看起来是很棒的 javascript moment.tz 库的问题:

每当我传入“Etc/GMTtime-value”的时区标识符时,返回的 moment.tz 对象会返回我认为是格式(“Z”)的值,因为它乘以 -1。

例子:

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 offset”值,我只需将其转换为“Etc/GMT”+ offset_value 并传递给 moment.tz 即可时区转换。然后我需要对该值进行进一步的操作(添加天数、显示“Z”格式的值等),但这个问题阻碍了进一步的工作。

这是 moment.tz 解析“Etc/GMT”时区值的缺陷,还是我错过了有关时区格式的基本知识?

最佳答案

IANA 数据库中的标识符,例如 Etc/GMT-7故意将它们的偏移量倒置。这是这种标识符样式设计的一部分。见 the note in Wikipedia on this , 和 in the tz database source itself . (基本上,它源于在某些环境中向后兼容旧 POSIX 标准的需要。)

但是,对于 Moment.js,如果您使用固定的时区偏移量,则根本不需要使用这些。事实上,您根本不需要时刻时区扩展。

// the parseZone method will retain the offset provided
var a = moment.parseZone("2016-09-29 21:00:00 -07:00");

// or, you can set the offset explicitly like this:
var b = moment.utc("2016-09-29 21:00:00").utcOffset("-07:00", true);

// or like this if you prefer:
var c = moment.utc("2016-09-29 21:00:00").utcOffset(-7, true);

对于 bc ,请注意 true需要参数来保留给定的本地时间。另请注意,我使用 moment.utc(...)最初解析字符串。它也适用于 moment(...) ,但是本地时区中的 DST 转换可能会干扰中间值。

另外,请确保您认识到 America/Los_Angeles根据 DST 是否生效,在 -8 和 -7 之间交替。这就是为什么您需要时刻时区来提供何时在偏移量之间切换的规则。

关于javascript - 设置 "Etc/GMT[+|-]HH:MM"时区的 moment.tz 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39779597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com