1

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

http://jsfiddle.net/wdvy9za7

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

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

我试图让变量 datenum 显示今天相对于 America/Chicago 的日期编号,无论脚本在哪里加载。

4

1 回答 1

1

当您使用 将时刻转换为 Javascript 日期toDate()时,您将丢失时区信息并根据原始时刻的时间戳创建一个日期,因此您将获得一个对应于本地时区 18:00 的日期。在这个 Github 问题中查看更详尽的解释:

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。

于 2019-04-23T13:46:16.340 回答