2017-09-01 65 views
0

我們將一個JSON日期傳遞給Moment Timezone JS。 我們在moment.tz()調用中設置我們的時區,以指定我們希望爲每個人顯示時間的時區,而不管用戶本地時區是什麼。 我們的問題是我現在想將它轉換回默認的Javascript時間格式,但保留moment.tz()指定的時區。我嘗試在新的Date()中包裝moment.tz()並附加.toDate(),但它只是從用戶計算機輸出本地日期(我將我的機器時區設置爲除我自己以外的其他東西來測試此內容)。我想要它做的是給我具體的時區日期/時間,我指定的時間是我在Moment中指定的時間。瞬時Timezone JS,返回Javascript日期

我的輸出示例。

//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:

https://jsfiddle.net/549La2ct/

+1

您只需要使用.t格式化的字符串oString()?像這裏一樣https://jsfiddle.net/4wby7f07/或者你需要解析JavaScript日期對象嗎? – DevDig

回答

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)

+1

這是我正在往下走的路線。我只需要知道GMT和zoneName的最後部分。謝謝,我會用這個。非常感激。 – ClosDesign

相關問題