【问题标题】:How can I get standard offset of a timezone with momemnt如何获得时区的标准偏移量
【发布时间】:2018-08-31 04:25:47
【问题描述】:

我需要找到特定时区的偏移量。如何使用 moment 来做到这一点?

假设我的客户端时区是 MST,我想找到 EST 时区偏移量。我需要在不考虑夏令时的情况下获得标准偏移量。

使用moment.tz("America/Edmonton").format('Z') 我得到-6:00 但这考虑了夏令时。我想要一些东西给我-7:00,因为它是标准偏移量。

【问题讨论】:

    标签: timezone momentjs timezone-offset


    【解决方案1】:

    如果是永久 DST 时区,它将是一个无限循环,对吗? 所以我最终的代码是:

    function getStandardOffset(zone) {
    
      // start with now
      var m = moment.tz(zone);
    
      // advance until it is not DST
      var counter = 1;
      while (m.isDST()) {
            m.add(1, 'month');
            if (counter > 12)
            {
                break;
            }
      }
    
      // return the formatted offset
      return m.format('Z');
    }
    

    【讨论】:

    • 这个数据集并不重要,但可以肯定 - 你可以做到这一点。也不要忘记增加计数器。
    【解决方案2】:

    这样的事情怎么样?

    function getStandardOffset(zone) {
    
      // start with now
      var m = moment.tz(zone);
    
      // advance until it is not DST
      while (m.isDST()) {
        m.add(1, 'month');
      }
    
      // return the formatted offset
      return m.format('Z');
    }
    
    getStandardOffset('America/Edmonton')  // returns "-07:00"
    

    当然,这会返回 当前 标准偏移量。如果时区过去使用了不同的标准偏移量,您需要从该范围内的某个时刻开始,而不是“现在”。

    【讨论】:

    • 大概它也可能与永久 DST 中的时区有问题?
    • Moment 的当前实现不适用。
    • 在永久 DST 时区的情况下,它将是一个无限循环,对吗?所以我把它改成了:
    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多