我们将JSON日期传递给Moment Timezone JS。 我们在moment.tz()调用中设置我们的时区,以指定我们希望时间显示给每个人的时区,而不管用户的本地时区是什么。 我们的问题是我现在要将其转换回默认的Javascript时间格式,但保留moment.tz()指定的时区。我尝试在一个新的Date()中包装moment.tz()并附加.toDate(),但只是从用户的计算机输出本地日期(我将我的机器时区设置为我自己以外的其他东西来测试它)。我想要它做的是给我我指定的特定时区日期/时间作为我在Moment中指定的时间。
我的输出示例。
//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中设置的时区
因此,如果我将时区设置为Dublin,尝试使用moment.tz()方法转换时刻时间
var eventTimeDateValue = moment.tz(1504897200000, "America/Denver").toDate();
输出:
Fri Sep 08 2017 20:00:00 GMT+0100 (GMT Daylight Time)
这与我在Moment JS中的“America / Denver”设置不符。我会把它作为:
Fri Sep 08 2017 13:00:00 GMT-0600 (Mountain Daylight Time)
有关如何将其转换为长格式但仍保留Moment JS设置时区的任何想法?
这是我的JSFiddle:
答案 0 :(得分:2)
如果您使用toDate()
,它将创建一个JavaScript Date对象,并且它不提供以您希望的方式控制输出的方法。
如果您想要所需格式的字符串,可以使用format()
方法,addition suggested in the docs获取时区长名称:
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
将具有值:
Fri Sep 08 2017 13:00:00 GMT-0600(Mountain Daylight Time)