【问题标题】:Looking for a way to retrieve timezones in which the current time is x寻找一种方法来检索当前时间为 x 的时区
【发布时间】:2017-01-12 11:38:27
【问题描述】:

我正在寻找一种方法来获取时区列表,其中当前时间是一个变量(它也必须依赖于 DST)。

例如,我需要向当地时间为 18:45 的用户推送消息。我可以从我们的数据库中按时区获取用户列表。所以我计划了一个每 15 分钟唤醒一次的预定事件,它需要检查当前是 18:45 所在的时区,以便能够检索到正确的用户。

我们的环境是node js。 我正在考虑的方式最好是一个网络服务或一些为我完成这一切的实用程序,包括来自iana timezones 数据库的更新。但是如果没有这样的选择,我可以处理不太方便的方法。

提前致谢。

【问题讨论】:

    标签: node.js datetime timezone iana


    【解决方案1】:

    这是使用moment-timezone 的一种简单方法(我相信它可以处理诸如夏令时之类的事情,虽然不是 100% 肯定——但肯定会比一个人从头开始做得更好..查看他们的 github 存储库以了解问题——这是一个复杂的主题):

    var moment = require('moment-timezone');
    var tm = moment();
    
    var toFind = tm.format('h:mm a');
    
    var userZones = ['America/Los_Angeles', 'America/New_York'];
    for (var i=0; i<userZones.length; i++) {
      var fmt = tm.tz(userZones[i]).format('h:mm a');
      if (fmt === toFind) console.log('matched zone: ' + userZones[i]);
    }
    

    【讨论】:

    • 是的,moment timezone 实现了 IANA 时区 DB 中的数据,因此 DST 得到了正确处理。
    • 谢谢,这或多或少是我最终所做的。令人讨厌的部分是需要提前获取可能与我的用户相关的所有可能时区。我使用了 moment 的 .isBetween(...) 因为我需要检查时间是否在 5 分钟以内。
    猜你喜欢
    • 2019-07-27
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 2014-10-21
    • 1970-01-01
    • 2011-01-18
    相关资源
    最近更新 更多