为什么时刻时区不适用于给定时区

时间:2017-08-29 12:03:48

标签: javascript datetime timezone momentjs datetime-conversion

我在时刻时区网站上的Chrome开发者工具中查看了一下:https://momentjs.com/timezone/

我执行:

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

结果仍然是:

  

Sun Oct 16 2011 12:00:00 GMT + 0200(欧洲中部夏令时)

为什么片刻时区不适用于给定的时区,我得到Central European Daylight Time

1 个答案:

答案 0 :(得分:0)

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

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

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

输出将是:

  

Sun Oct 16 2011 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')

所有上述内容都生成相同的日期( 10月16日 th 2011年12月在洛杉矶时区)。

请注意,这些值为零索引(1月为零),而在字符串中,月份为1索引(1月为1)。

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