节点js中的原始时区信息

时间:2016-07-06 19:38:07

标签: node.js datetime timezone

我无法找到允许我在任何时间点查询任何时区的时区信息的程序包。或者至少在接下来的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的输出来构建我自己的数据库。但我宁愿不。平台独立性非常好。但不是交易破坏者。

2 个答案:

答案 0 :(得分:2)

Moment-timezone绝对符合这一要求。

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();

这是有效的,因为moment-timezone是一个扩展名到moment.js。所有的moment.js函数都可用,包括utcOffset函数。

是的,您还可以获取时区的名称:

var allTimezones = moment.tz.names();

然而,我会突出一个缺陷:

  

......或者至少在接下来的10年左右......

地球上没有任何系统可以准确地为您预测未来10年的时区。政府不断改变主意,系统必须相应更新。你应该为此做好计划。

TZDB中的信息(由Linux,时区和其他许多人使用)仅与世界各国政府提供的当前信息一样准确。未来10年的预测肯定需要多次重新评估。

答案 1 :(得分:0)

你看过tz节点模块here吗?它的来源here

它导出一个具有所有可能时区&#39;偏移的对象&#39;作为键,以及适用的时区数组作为值。您可以简单地执行var tz = requrie('tz');,遍历tz中的所有键,然后遍历与键关联的数组,从每个对象中删除name

结果列表应该列出所有可能的时区。