Momentjs timezone - 在特定时区获取日期

Momentjs timezone - getting date at time in specific timezone

我正在尝试从用户特定时区的 UTC 基准​​创建日期,在本例中 "America/Los Angeles" 使用 momentjs/momentjs 时区。但是,我没有得到预期的结果:

var tempDate = moment(1448841600000); //moment("2015-11-30"); //monday 11/30 in UTC
var adjustedStart = moment.tz(tempDate, "America/Los_Angeles");
adjustedStart.hour(9);
adjustedStart.minute(30);
console.log("adjustedStart in milliseconds:" + adjustedStart.valueOf());

控制台输出为 1448875800000,即 UTC/GMT 的 2015 年 11 月 30 日 9:30AM,我期望的是 1448904600000,即太平洋海岸时间的 2015 年 11 月 30 日 9:30AM。如何将此开始日期转换为用户所在时区的正确时间?

来自http://momentjs.com/docs/

moment#valueOf 简单地输出自 Unix Epoch

以来的毫秒数

请务必注意,尽管上面的显示有所不同,但它们都是同一时刻。

var a = moment();
var b = moment.utc();
a.format();  // 2013-02-04T10:35:24-08:00
b.format();  // 2013-02-04T18:35:24+00:00
a.valueOf(); // 1360002924000
b.valueOf(); // 1360002924000

所以不同的时区应该没有什么不同。

您应该使用 adjustedStart.format(); 来查看差异

是的,1448841600000就是你说的日期:

moment(1448841600000).utc().format()
// "2015-11-30T00:00:00+00:00"

但那是太平洋时间的前一天

moment(1448841600000).tz('America/Los_Angeles').format()
// "2015-11-29T16:00:00-08:00"

调整为9:30太平洋时,是29号,不是30号。

moment(1448841600000).tz('America/Los_Angeles').hour(9).minute(30).format()
// "2015-11-29T09:30:00-08:00"

当你调用valueOf时,结果是:

moment(1448841600000).tz('America/Los_Angeles').hour(9).minute(30).valueOf()
// 1448818200000

这是正确的值,但与您提供的值不同。然而,这确实是我在 运行 你的代码时得到的。

来自 Chrome 调试 window 的屏幕截图,以及您的确切代码:

此外,您在评论中写道:

//moment("2015-11-30"); //monday 11/30 in UTC

实际上,那是 当地时间,而不是 UTC。如果你想要 UTC,你会使用:

moment.utc("2015-11-30")

尽管我不清楚您是使用此字符串输入还是数字时间戳。

如果您要问的是您希望将 UTC 日期视为本地日期,然后应用任意本地时间 - 这是一个有点奇怪的操作,但它会像这样:

var tempDate = moment.utc(1448841600000);
var adjustedStart = moment.tz([tempDate.year(), tempDate.month(), tempDate.date(), 9, 30],
                                                                  "America/Los_Angeles");
console.log("adjustedStart in milliseconds:" + adjustedStart.valueOf());
// adjustedStart in milliseconds:1448904600000

这给出了您要求的值,但对我来说 - 这是一种预期有问题的气味。我会更仔细地了解需求和系统的其他部分。