【问题标题】:Why moment-timezone does not apply given timezone为什么时刻时区不适用于给定时区
【发布时间】:2017-08-29 12:03:47
【问题描述】:

我在 moment-timezone 网站上的 Chrome 开发者工具中查看 moment:https://momentjs.com/timezone/

我执行:

moment(new Date(2011, 9, 16, 12)).tz('America/Los_Angeles').toDate()

结果还是:

2011 年 10 月 16 日星期日 12:00:00 GMT+0200(中欧夏令时间)

为什么 moment-timezone 不适用给定的时区,我得到Central European Daylight Time?

【问题讨论】:

  • 只是一个想法...您正在使用 moment.js,因此您无需处理 Date 怪事。如果你用new Date(2011, 9, 16, 12) 喂它,你就违背了整体目的。
  • 你是否在 moment.tz 对象中添加了时区列表?
  • @AnkitSolanki 我没有,他们有,我不是momentjs.com/timezone的作者
  • 如果您有没有时区的导入时刻 js 文件,那么您必须添加所有时区然后这可以工作。
  • 这是 close 到 this question,虽然不完全重复,所以我会保持这个打开。不过,你应该阅读。谢谢。

标签: javascript datetime timezone momentjs datetime-conversion


【解决方案1】:

当您创建 new Date(2011, 9, 16, 12) 时,无论浏览器的时区是什么,它都会在 2011 年 10 月 16 日th 12:00 获得。然后tz 将其转换为指定的时区,toDate() 转换回日期对象(使用浏览器的时区)。

如果您想在洛杉矶时区创建 2011 年 10 月 16 日th 12:00,则无需使用new Date。你可以直接使用moment.tz:

moment.tz('2011-10-16 12:00', 'America/Los_Angeles')

输出将是:

2011 年 10 月 16 日星期日 12:00:00 GMT-0700

您还可以创建日期传递值而不是字符串(check the docs 以查看所有选项):

moment.tz([2011, 9, 16, 12], 'America/Los_Angeles')
moment.tz({ year: 2011, month: 9, day: 16, hour: 12 }, 'America/Los_Angeles')

以上所有都产生相同的日期(洛杉矶时区2011 年 10 月 16 日th 12:00)。

请注意,这些值是从零开始的(一月是零),而在字符串中,月份是从一开始的(一月是1)。


在上面调用toDate() 也会将日期/时间转换为浏览器的默认时区。

【讨论】:

  • 请记住,这会创建一个moment 对象。从那里开始,仍然应该使用像 format 这样的函数来获得所需的输出。
  • @MattJohnson 确实!但是由于 OP 没有指定他们想要特定格式的日期,所以我没有在问题中包含它。不过谢谢提醒!
猜你喜欢
  • 2020-12-06
  • 1970-01-01
  • 2022-06-11
  • 2018-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-06
  • 2020-02-21
相关资源
最近更新 更多