当前位置:  开发笔记 > 编程语言 > 正文

Moment.js时区-在特定时区的时间获取日期

如何解决《Moment.js时区-在特定时区的时间获取日期》经验,为你挑选了1个好方法。

我试图根据用户的特定时区(在本例中为“美国/洛杉矶”)的UTC基准创建日期,方法是使用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中是11/30/15 9:30 AM,我期望的是1448904600000,在太平洋海岸时间是11/30/15 9:30 AM。如何将该开始日期转换为用户所在时区的正确时间?



1> Matt Johnson..:

是的,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调试窗口的屏幕截图,其中包含您的确切代码:

另外,您在评论中写道:

//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

这提供了您所要求的价值,但对我来说-这是一种气味,说明期望有问题。我将在需求和系统的其他部分上仔细观察。

推荐阅读
大大炮
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有