2016-09-29 144 views
0

我的日期時間作爲UTC存儲在數據庫中。當他們被髮送到客戶端時,我想將它們轉換爲當地時間。將UTC轉換爲本地時間在javascript中不起作用

的Javascript接收一個給定的日期時間爲一個字符串,它看起來像這樣:

2016-09-29T19:13:40

如果我跑弦上我得到這樣的輸出new Date('2016-09-29T19:13:40')

Thu Sep 29 2016 19:13:40 GMT-0400 (Eastern Daylight Time)

雖然 - 0400偏移量存在,它不會改變時間。由於UTC偏移量不會顯示給用戶,因此它看起來像時間戳已經關閉了4個小時。

相反,如果我這樣做: new Date('2016-09-29T19:13:40').toISOString();

輸出是:

2016-09-29T23:13:40.000Z

正如你可以看到它實際上是由4調整時間,並消除了偏移。

如何當我喂javascript的UTC日期時間轉換爲本地所有它所做的是添加一個偏移量,但是當我餵它它認爲是一個本地日期時間它,並要求它轉換爲UTC它實際上調整時間?

我該如何調整UTC日期時間到本地調整本地UTC的方式?

編輯

這裏有一個小提琴:https://jsfiddle.net/qjmfLu67/1/

我越來越IE11和Chrome之間的不同的行爲。 IE11不會將UTC轉換爲本地。 Chrome會將UTC轉換爲本地,並且如果它將日期識別爲UTC,那麼當您運行toISOString時,它不會調整任何內容。

+0

無法重現,我'GMT + 0200'和它的變化之日起對我蠻好,結束了'21:13:40'等 – adeneo

+0

我的控制檯上運行它,我得到這個:'new Date('2016-09-29T19:13:40') Thu Sep 29 2016 16:13:40 GMT-0300(E.南美標準時間)' –

+0

需要更多的上下文 - 您是否試圖運行這在你的瀏覽器?另外,你的「逆向」例子實際上只是和你的初始陳述一樣作出相同的假設。 –

回答

0

使用日期並不容易,特別是如果您進行TZ轉換。我建議使用momentjs(http://momentjs.com/docs/),就像我一樣。

// create a utc-zone moment 
var x = moment.utc('2016-09-29T19:13:40') 

x.format() 
// output is "2016-09-29T19:13:40Z" 

// adjust offset for the initial moment x by the local offset we get from moment created against local tz 
x.utcOffset(moment().utcOffset()); 

x.format() 
// output is "2016-09-29T22:13:40+03:00" 
0

看起來像IE11,你必須以完整的JavaScript格式傳遞日期字符串才能正常工作。

new Date("Thu Sep 29 2015 19:13 GMT") 
相關問題