2016-11-03 72 views
0

我正在使用moment-timezone,因此我可以將所選時區轉換爲客戶端的時區。使用moment.js(時區)時返回日期和時間格式(「YYYY-MM-DD HH:mm」)格式

我沒能實現它在比這更好的方式:

convertSelectedTimeZoneToClients() { 
    let timeZoneInfo = { 
     usersTimeZone: this.$rootScope.mtz.tz.guess(), 
     utcOffset: this.formData.timeZone.offset, 
     selectedDateTime: this.toJSONLocal(this.formData.sessionDate) + " " + this.formData.sessionTime 
    }; 

    let utcTime = this.$rootScope.mtz.utc(timeZoneInfo.selectedDateTime).utcOffset(timeZoneInfo.utcOffset).format("YYYY-MM-DD HH:mm"); 
    let convertedTime = this.$rootScope.mtz.tz(utcTime, timeZoneInfo.usersTimeZone).format("Z"); 
    return convertedTime; 
} 

所以基本上我使用usersTimeZone: this.$rootScope.mtz.tz.guess(),猜()函數來找出從瀏覽器的時區。 然後,我使用utcOffset從日期時間選擇器和下拉列表中獲取值,並將它們轉換爲UTC值。 最後,我想將該utc值轉換爲用戶時區值。

我得到的對象是這樣的:

enter image description here

_D轉換後代表正確的值。我曾嘗試在轉換時間變量上添加一堆不同的.format()模板,但我無法以這種格式查看時間:「YYYY-MM-DD HH:mm」。我想它比使用.utcOffset()函數的工作不同。

有人可以幫我嗎?

+1

作爲使用矩的一般規則:以'_'開頭的所有屬性(如'_d')都是[內部使用](http://stackoverflow.com/a/28132227/4131048),不應使用。請注意,您顯示的代碼與屏幕截圖中的代碼不同。最後,我認爲知道'toJSONLocal'返回什麼是有用的('timeZoneInfo.selectedDateTime'的值是多少?) – VincenzoC

回答

1

您不需要猜測客戶端時區以轉換爲當地時間。只需使用local函數。

例如:

moment.tz('2016-01-01 00:00', 'America/New_York').local().format('YYYY-MM-DD HH:mm') 

對於位於太平洋時區的用戶,這個來自東歐轉換爲太平洋,你會得到的"2015-12-31 21:00"輸出字符串。對於其他時區的用戶,輸出結果與預期不同。

您不需要格式化爲字符串並重新解析它,或者手動操作UTC偏移量。這幾乎沒有保證。

+0

感謝您的回答。還有一個問題。當我傳遞這個值時:'America/New_York'我怎樣才能找到它?這就是爲什麼我使用.guess(),只是爲了找出用戶的時區。 @MattJohnson –

+0

我不明白你在問什麼。在我給出的例子中,「America/New_York」是* source *時區 - 給定值爲「in」的時區。你不會想這個,或者整個事情都不會。 –