设置后,瞬间时区更改为本地

时间:2019-04-19 21:26:18

标签: momentjs moment-timezone

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

this

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

第31行是我试图将日期设置为相对于美国/芝加哥的日期。日期不重要,时间是18:00。在代码的后面,第36行是我今天的日期在第38行进行检查的地方

无论脚本的加载位置如何,我都试图获取变量datenum来显示相对于美国/芝加哥的今天的日期号。

1 个答案:

答案 0 :(得分:0)

使用toDate()从一瞬间转换为Javascript日期时,您将丢失时区信息,并基于原始时刻的时间戳创建日期,因此您将获得一个对应于18的日期:当地时区为00。在this Github issue中查看更详尽的说明:

  

Date对象除了使用时不具有时区功能   当地时区。我们对此无能为力。当您使用toDate时,   时区或时区中“代表”其他时间的任何能力   区域被剥离。您留下了及时的原始瞬间   以时间戳[...]

表示      

您也可能刚刚完成了一下操作(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。