我需要在我的服务器上触发基于时间的事件,该事件以UTC时间运行 在我的UI中,我接受2个参数
我更喜欢不显示时区名称,因为它会延迟页面呈现,我相信它不需要。
我检查了片刻库,但是我没有看到如何从时区偏移中获取时区名称。 API moment.tz.names()
返回所有时区。
是否有返回的API,比方说
moment.tz.name('330') = 'Asia/Kolkata'
此外,如果有解决方案,将解决DST问题
答案 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本身提供的,具有parseZone
或utcOffset
函数。
有一个示例in the documentation非常适合您的情况。
...
此功能的一种用途是,如果您只想使用数字输入值来构造具有特定时区偏移量的时刻:
moment([2016, 0, 1, 0, 0, 0]).utcOffset(-5, true) // Equivalent to "2016-01-01T00:00:00-05:00"