我们正在将一个JSON日期传递到Timezone JS。我们在moment.tz()调用中设置时区,以指定我们希望为每个人显示的时间,而不管用户的本地时区是什么。我们的问题是,我现在希望将它转换回默认的Javascript时间格式,但保留moment.tz()指定的时区。我尝试将moment.tz()包装在一个新的Date()中,并附加了.toDate(),但是这只是从用户的计算机输出本地日期(我将我的机器时区设置为非我自己的东西来测试)。我想要做的是给我特定的时区日期/时间,我指定的时间是我指定的时间。
我输出的例子。
//1504897200000 = 1:00 pm on Friday September 8, 2017
var eventTimeDate = moment.tz(1504897200000, "America/Denver").format('h:mm A');现在,我想取我的JSON日期,并将它转换回默认的Javascript格式,它应该是:
Fri Sep 08 2017 13:00:00 GMT-0600 (Mountain Daylight Time)但是,如果我更改本地计算机上的时区,它将显示为计算机设置的时区,而不是我在Moment.js中设置的时区。
因此,如果我将时区设置为都柏林,尝试使用moment.tz()方法转换瞬间时间
var eventTimeDateValue = moment.tz(1504897200000, "America/Denver").toDate(); 它的产出如下:
Fri Sep 08 2017 20:00:00 GMT+0100 (GMT Daylight Time)这不符合“美国/丹佛”的设置,我现在有JS。我希望它是:
Fri Sep 08 2017 13:00:00 GMT-0600 (Mountain Daylight Time)对于如何将它转换回长格式,但仍然保持JS设置时区的时刻,有什么想法吗?
这是我的JSFiddle:
发布于 2017-09-01 19:40:16
如果您使用toDate(),它将创建一个JavaScript Date对象,并且它不会提供一种以您想要的方式控制输出的方法。
如果您想要使用所需格式的字符串,可以使用format()方法和一个文档中建议的加法来获取时区长名称:
var abbrs = {
EST : 'Eastern Standard Time',
EDT : 'Eastern Daylight Time',
CST : 'Central Standard Time',
CDT : 'Central Daylight Time',
MST : 'Mountain Standard Time',
MDT : 'Mountain Daylight Time',
PST : 'Pacific Standard Time',
PDT : 'Pacific Daylight Time',
};
moment.fn.zoneName = function () {
var abbr = this.zoneAbbr();
return abbrs[abbr] || abbr;
};
var str = moment.tz(1504897200000, "America/Denver").format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ (zz)');变量str将具有以下值:
2017年9月8日星期五13:00格林尼治时间-0600(山区夏令时间)
https://stackoverflow.com/questions/46006531
复制相似问题