我找不到一个包,让我可以在任何时间点查询任何时区的时区信息。或者至少在未来 10 年左右。在我的用例中,历史值不感兴趣。
理想情况下,我希望有一个这样的 API:
var tzInfo = require(tz-info);
var utcOffset = tzInfo.getOffset('Europe/Stockholm', new Date()); //query the current offset from UTC
var allTimezones = tzInfo.getAllTimezoneNames();
我已经搜索过,但结果很短。大多数像时刻时区这样的库似乎都非常专注于在不同时区表达一个时间。这与我的用例不同。
在 Linux 中,您可以执行以下操作:
#get all timezone names
cd /usr/share/zoneinfo ; find
#get all offset changes
zdump -v <timezone>
我想这是一个选项,并解析 zdump 的输出以构建我自己的数据库。但我宁愿不。平台独立性非常好。但不是交易破坏者。
时刻时区绝对可以满足这个要求。
var moment = require('moment-timezone');
// query the current offset from UTC
var utcOffset = moment.tz('Europe/Stockholm').utcOffset();
// query the offset from UTC for a specific point in time
// (input can be string, date, moment, timestamp, etc. see the docs)
var utcOffset = moment.tz(input, 'Europe/Stockholm').utcOffset();
这是有效的,因为时刻时区是时刻.js的扩展。 所有当下.js功能都可用,包括utcOffset
功能。
是的,您还可以获取时区的名称:
var allTimezones = moment.tz.names();
但是,我将强调一个缺陷:
。或者至少在未来 10 年左右...
地球上没有任何系统可以准确地预测未来 10 年的时区。 政府不断改变主意,系统必须相应地更新。 您应该为此做好计划。
TZDB 中的信息(Linux、moment-timezone 和许多其他人都使用)仅与世界各国政府提供的当前信息一样准确。 对未来10年的预测肯定需要多次重新评估。
你在这里看过 tz 节点模块吗?它的来源在这里。
它将具有所有可能的时区"偏移量"的对象导出为键,并将适用时区数组导出为值。您可以简单地执行var tz = requrie('tz');
,遍历tz
中的所有键,然后遍历与键关联的数组,从每个对象中提取name
。
生成的列表应提供所有可能时区的列表。