在javascript中从偏移量获取时区

在javascript中从偏移量获取时区,javascript,momentjs,Javascript,Momentjs,我需要在UTC时间运行的服务器上触发基于时间的事件。 在我的UI中,我接受两个参数 需要运行的触发器的本地时间 时区偏移 我宁愿不显示时区名称,因为它会延迟页面呈现,而且我认为这是不必要的 我检查了时刻库,但我不知道如何从时区偏移量中获取时区名称。APImoment.tz.names()返回所有时区 比如说,有没有返回的API moment.tz.name('330')=“亚洲/加尔各答” 另外,如果有解决方案,当使用固定偏移量时,DST问题是否会得到解决,您不需要使用矩时区。所有这些功能都由矩

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

  • 需要运行的触发器的本地时间
  • 时区偏移
  • 我宁愿不显示时区名称,因为它会延迟页面呈现,而且我认为这是不必要的

    我检查了时刻库,但我不知道如何从时区偏移量中获取时区名称。API
    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