我们将一个 JSON 日期传递给 Moment Timezone JS。 我们在 moment.tz() 调用中设置我们的时区,以指定我们希望时间显示给每个人的时区,而不管用户的本地时区是什么。 我们的问题是我现在想将它转换回默认的 Javascript 时间格式,但保留 moment.tz() 指定的时区。我尝试将 moment.tz() 包装在一个新的 Date() 中并附加 .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 中设置的时区
因此,如果我将时区设置为都柏林,尝试使用 moment.tz() 方法转换 Moment 时间
var eventTimeDateValue = moment.tz(1504897200000, "America/Denver").toDate();
输出:
Fri Sep 08 2017 20:00:00 GMT+0100 (GMT Daylight Time)
这与我在 Moment JS 中的“美国/丹佛”设置不匹配。我希望它是:
Fri Sep 08 2017 13:00:00 GMT-0600 (Mountain Daylight Time)
关于如何将其转换回长格式但仍保留 Moment JS 设置时区的任何想法?
这是我的 JSFiddle:
最佳答案
如果您使用 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)
关于javascript - Moment Timezone JS,返回 Javascript 日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46006531/