在javascript中从偏移获取时区

时间:2017-02-23 15:53:19

标签: javascript momentjs

我需要在我的服务器上触发基于时间的事件,该事件以UTC时间运行 在我的UI中,我接受2个参数

  1. 需要运行的触发器的本地时间
  2. 时区偏移
  3. 我更喜欢不显示时区名称,因为它会延迟页面呈现,我相信它不需要。

    我检查了片刻库,但是我没有看到如何从时区偏移中获取时区名称。 API moment.tz.names()返回所有时区。

    是否有返回的API,比方说 moment.tz.name('330') = 'Asia/Kolkata' 此外,如果有解决方案,将解决DST问题

2 个答案:

答案 0 :(得分:1)

因此,对于任何特定的偏移量,总会有/经常有多个名称,因此我不知道moment.tz.name('offset') = 'Country/Zone' api。

不过,您可以使用简单的过滤器函数基于偏移量获取所有名称的数组

const moment = require('moment-timezone');

const getZoneFromOffset = offsetString => moment.tz.names().filter(tz => moment.tz(tz).format('Z') === offsetString)

console.log(getZoneFromOffset("+05:30"))
// [ 'Asia/Calcutta', 'Asia/Colombo', 'Asia/Kolkata' ]

在上面的示例中,我使用"+05:30"作为不100%匹配的偏移值,您使用的情况是330,但它演示了如何解决此问题。您还可以获取所有时区名称及其偏移量的数组,就像在moment.tz.names()上的简单映射一样

const getZoneObjects = () =>  moment.tz.names().map(zone => ({ zone, offset: moment.tz(zone).format('Z') }))

/*
[
  { zone: 'Africa/Abidjan', offset: '+00:00' },
  { zone: 'Africa/Accra', offset: '+00:00' },
  { zone: 'Africa/Addis_Ababa', offset: '+03:00' },
  ...
*/

以上示例使用Z作为时区格式,但是如果"+5:30"不符合您的需求,您可以查看https://devhints.io/moment来查看其他可以使用的格式,例如{{ 1}},在您的用例中为ZZ

答案 1 :(得分:0)

使用固定偏移量时,不需要使用Moment-Timezone。所有这些功能都是Moment本身提供的,具有parseZoneutcOffset函数。

有一个示例in the documentation非常适合您的情况。

  

...

     

此功能的一种用途是,如果您只想使用数字输入值来构造具有特定时区偏移量的时刻:

moment([2016, 0, 1, 0, 0, 0]).utcOffset(-5, true) // Equivalent to "2016-01-01T00:00:00-05:00"