Moment Timezone JS,返回Javascript日期

时间:2017-09-01 19:03:42

标签: javascript datetime timezone momentjs datetime-format

我们将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)

有关如何将其转换为长格式但仍保留M​​oment JS设置时区的任何想法?

这是我的JSFiddle:

https://jsfiddle.net/549La2ct/

1 个答案:

答案 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)