在javascript中从偏移量获取时区
我需要在UTC时间运行的服务器上触发基于时间的事件。在javascript中从偏移量获取时区,javascript,momentjs,Javascript,Momentjs,我需要在UTC时间运行的服务器上触发基于时间的事件。 在我的UI中,我接受两个参数 需要运行的触发器的本地时间 时区偏移 我宁愿不显示时区名称,因为它会延迟页面呈现,而且我认为这是不必要的 我检查了时刻库,但我不知道如何从时区偏移量中获取时区名称。APImoment.tz.names()返回所有时区 比如说,有没有返回的API moment.tz.name('330')=“亚洲/加尔各答” 另外,如果有解决方案,当使用固定偏移量时,DST问题是否会得到解决,您不需要使用矩时区。所有这些功能都由矩
在我的UI中,我接受两个参数
moment.tz.names()
返回所有时区
比如说,有没有返回的API
moment.tz.name('330')=“亚洲/加尔各答”
另外,如果有解决方案,当使用固定偏移量时,DST问题是否会得到解决,您不需要使用矩时区。所有这些功能都由矩本身提供,包括
parseZone
或utcOffset
功能
这里有一个与您的场景非常匹配的示例
此功能的一个用途是,如果要仅使用数字输入值构造具有特定时区偏移的力矩:
moment([2016, 0, 1, 0, 0, 0]).utcOffset(-5, true) // Equivalent to "2016-01-01T00:00:00-05:00"
因此,对于任何特定的偏移量,总是/经常会有多个名称,因此就我所知,没有
moment.tz.name('offset')='Country/Zone'
api
但是,您可以使用一个简单的筛选函数,根据偏移量获得所有名称的数组
const moment=require('moment-timezone');
常量getZoneFromOffset=offsetString=>moment.tz.names().filter(tz=>moment.tz(tz).format('Z')==offsetString)
console.log(getZoneFromOffset(“+05:30”))
//[‘亚洲/加尔各答’、‘亚洲/科伦坡’、‘亚洲/加尔各答’]
在上面的示例中,我使用了偏移量值“+05:30”
,它与330的用例不完全匹配,但它演示了如何解决这个问题。您还可以获得所有时区名称及其偏移量的数组,就像矩.tz.names()上的简单映射一样
const getZoneObjects=()=>moment.tz.names().map(zone=>({zone,offset:moment.tz(zone.format('Z')}))
/*
[
{区:'非洲/阿比让',偏移量:'+00:00'},
{地区:'非洲/阿克拉',偏移量:'+00:00'},
{地区:'非洲/亚的斯亚贝巴',偏移量:'+03:00'},
...
*/
上面的示例使用
Z
作为时区格式,但是如果“+5:30”
与您的需要不匹配,您可以查看可以使用的其他格式,例如ZZ
,在您的用例中将是“+0530”
。您需要的信息是否在“new Date()”中(对我来说是give:2017年2月23日星期四16:54:19 GMT+0100(巴黎,马德里))。如果是,我可以给你一个正则表达式来提取它们。例如..你可以给一个自定义时间,比如17小时和00分钟来运行一个事件。此外,你可以发送+1作为offset..服务器在UTC时区。它必须在17:00:00 GMT+0100运行事件,所以你只需要偏移量?不,恐怕没有API从偏移量返回时区名称无法从偏移量获取此类输出,请参阅。客户端应以UTC格式发送日期,这将更容易。因此,如果用户选择17:00(+1 GMT),则会发送18:00