javascript - 从javascript中的偏移量获取时区

标签 javascript momentjs

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

  • 需要运行的触发器的本地时间
  • 时区偏移

  • 我更喜欢不显示时区名称,因为它会延迟页面呈现,我相信它是不需要的。

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

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

    最佳答案

    因此,任何特定偏移量总是/经常有多个名称,因此没有 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"对于与您的用例 330 不 100% 匹配的偏移值,但它演示了如何解决该问题。您还可以获取所有时区名称及其偏移量的数组,例如 moment.tz.names() 上的简单 map
    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查看您可以使用的其他格式,例如 ZZ这将是 "+0530"在您的用例中。

    关于javascript - 从javascript中的偏移量获取时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42420441/

    相关文章:

    javascript - Vue.js:冲突 v-html 和一个函数

    javascript - moment.js 浏览器独立吗?

    Angular 2 "Expression has changed after it was checked"

    javascript - 如何使用 momentjs 或 vanilla JS 将 ISO 日期格式转换为 yyyy-MM-dd 格式?

    javascript - Twitter typeahead - 为什么它只匹配一个结果?

    javascript - d3.js:670 错误:<rect> 属性 y:预期长度, "NaN"

    javascript - javascript日期构造函数中的日期溢出

    javascript - 解开 HTML 标签,仅保留第一级

    javascript - ReactJS - onClick 在原始 javascript 中不起作用

    javascript - 如何使用 date-fns-tz 检测时区缩写?