【问题标题】:Moment timezone changes to local after I set it设置时区后立即更改为本地
【发布时间】:2019-04-19 21:26:18
【问题描述】:

我有一段使用时区的 javascript 代码,我正在尝试计算相对于美国/芝加哥的日期,无论它在哪里加载。然后稍后我将显示美国/芝加哥相对于用户当地时区的时间跨度。

http://jsfiddle.net/wdvy9za7

var d = moment("18:00", "HH:mm").tz("America/Chicago");

第 31 行是我尝试将日期设置为相对于美国/芝加哥的位置。日期无关紧要,重要的是时间是 18:00。稍后在代码第 36 行是我在第 38 行获取今天的日期以进行检查的地方

我正在尝试获取变量 datenum 以显示相对于美国/芝加哥的今天的日期编号,无论脚本在哪里加载。

【问题讨论】:

    标签: momentjs moment-timezone


    【解决方案1】:

    当您使用 toDate() 从时刻转换为 Javascript 日期时,您将丢失时区信息并根据原始时刻的时间戳创建日期,因此您将获得对应于 18:00 的日期当地时区。更详尽的解释见this Github issue

    Date 对象除了使用 当地时区。我们对此无能为力。当您使用 toDate 时, 任何时刻或时刻时区“代表”其他时间的能力 区域被剥离。你只剩下原始的瞬间 由时间戳表示 [...]

    您不妨刚刚完成 moment(1493092800000).toDate() 或 moment.utc(1493092800000).toDate()。一切都和新的一样 日期(1493092800000)。

    您可以改为保留时刻并使用 Moment 的 date() 方法:

    var d = moment("18:00", "HH:mm").tz("America/Chicago");
    var datenum = d.date();
    

    这会告诉你当地的日期是什么时候,在芝加哥是 18:00。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 2021-01-07
      • 2023-03-22
      • 2015-04-30
      • 1970-01-01
      • 1970-01-01
      • 2011-02-23
      • 2011-12-06
      • 2021-10-24
      相关资源
      最近更新 更多