为什么 moment-timezone 中可用的 UTC 偏移量与维基百科 UTC 列表不完全相同

Why the UTC offsets available in moment-timezone are not exactly the same as Wikipedia UTC list

我正在使用 momentJs

将所有访问者当地时间转换为 UTC
visitor_utc = moment().utc().valueOf()

并得到这样的偏移量

visitor_utc_offset = moment().utcOffset().valueOf() / 60

我想要一个包含偏移量的下拉列表 (... -01:00, +00:00, +01:00, +02:00 ....) 以便用户可以更改并设置他的实际偏移量。默认选择的值为 visitor_utc_offset

有没有什么方法可以使用 momentJs 获取偏移量列表?

使用 moment-timezone 可以做类似的事情:

for element in moment.tz.names()
    console.log moment.tz(element).format("Z")

但它给出了一个带有冗余值的长列表(因为我只是格式化可以具有相同偏移量的时区名称)

我还在维基百科上找到了一个列表List_of_UTC_time_offsets但是我不确定它是否是一个完整的列表,它对未来是否可靠?

更新

为了比较 moment-timezone 中使用的偏移量列表和维基百科中的偏移量列表,我使用了以下代码:

  for element in moment.tz.names()
    if $.inArray( moment.tz(element).format("Z"), arr ) <= -1
      arr.push moment.tz(element).format("Z") 

这消除了所有重复条目,所以我得到了这样的数组:

["+00:00", "+03:00", "+01:00", "+02:00", "-09:00", "-08:00", "-04:00", "-03:00", "-05:00", "-06:00", "-04:30", "-07:00", "-02:00", "-02:30", "+08:00", "+07:00", "+10:00", "+11:00", "+05:00", "+12:00", "+06:00", "+05:30", "+09:00", "+04:00", "+04:30", "+05:45", "+06:30", "-01:00", "+09:30", "+08:45", "+10:30", "-10:00", "-11:00", "-12:00", "+13:00", "+14:00", "+12:45", "-09:30", "+11:30"]

此数组包含 39 个偏移量,但在维基百科中有 40 个偏移量

所以找了一段时间后,我发现在维基百科中你可以找到偏移量 +03:30-03:30 但在当下时区你不能 !!

这很奇怪!?

认识到时区与偏移量不同。

时区会根据政府的突发奇想更改时差。许多夏令时会定期、半定期或不定期更改。有些人为了其他动机改变了基准偏移量,例如当萨摩亚跳到国际日期变更线的另一边时。

如果您询问他们的 current 偏移量,那么您不能保证您使用的是 correct 中任何给定点的偏移量时间。您不能只选择一个时间点并假设偏移量是特定用户的 偏移量。

关于您的时间代码,您只是检查每个时区的 当前 偏移量。每个区域都有偏移量变化的历史记录,这在您的列表中没有说明。您可以检查每个区域条目中的 offsets 数组以查看它们。

另请参阅 the timezone tag wiki 中的 "Time Zone != Offset"。

偏移量下拉列表的唯一有效用途是创建日期时间偏移量选择器。即,特定日期和时间与特定偏移相关联。例如,一个人可能有一个表格,其中发生特定事件的本地日期、时间和偏移量。