Moment Timezone JS,回到 Javascript 日期
Moment Timezone JS, back to Javascript date
我们正在将 JSON 日期传递给 Moment Timezone JS。
我们在 moment.tz() 调用中设置我们的时区,以指定我们希望时间显示给每个人的时区,而不管用户的本地时区是什么。
我们的问题是我现在想将其转换回默认的 Javascript 时间格式,但保留 moment.tz() 指定的时区。我尝试将 moment.tz() 包装在一个新的 Date() 中并附加 .toDate() 但这只是从用户计算机输出本地日期(我将我的机器时区设置为我自己以外的其他时间来测试这个).我想要它做的是给我指定的特定时区 date/time 作为我在 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 中的 "America/Denver" 设置不匹配。我希望它是:
Fri Sep 08 2017 13:00:00 GMT-0600 (Mountain Daylight Time)
关于如何将其转换回长格式但仍保留 Moment JS 设置时区的任何想法?
这是我的 JSFiddle:
如果您使用 toDate()
,它会创建一个 JavaScript 日期对象,并且它不提供按您想要的方式控制输出的方法。
如果您想要所需格式的字符串,可以使用 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)
我们正在将 JSON 日期传递给 Moment Timezone JS。 我们在 moment.tz() 调用中设置我们的时区,以指定我们希望时间显示给每个人的时区,而不管用户的本地时区是什么。 我们的问题是我现在想将其转换回默认的 Javascript 时间格式,但保留 moment.tz() 指定的时区。我尝试将 moment.tz() 包装在一个新的 Date() 中并附加 .toDate() 但这只是从用户计算机输出本地日期(我将我的机器时区设置为我自己以外的其他时间来测试这个).我想要它做的是给我指定的特定时区 date/time 作为我在 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 中的 "America/Denver" 设置不匹配。我希望它是:
Fri Sep 08 2017 13:00:00 GMT-0600 (Mountain Daylight Time)
关于如何将其转换回长格式但仍保留 Moment JS 设置时区的任何想法?
这是我的 JSFiddle:
如果您使用 toDate()
,它会创建一个 JavaScript 日期对象,并且它不提供按您想要的方式控制输出的方法。
如果您想要所需格式的字符串,可以使用 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)