2013-10-16 171 views
5

我使用帶時區的moment.js在Web應用程序中進行日期操作。我將所有日期存儲在UTC中,並將它們作爲UTC返回給用戶界面。我有用戶的時區。我想將UTC時間轉換爲本地用戶時區。使用moment.js將Utc日期更改爲本地日期

var timezone = "America/New_York"; 
var utcDate = "2013-10-16T10:31:59.0537721Z"; 

var localDate = moment(utcDate).utc().tz(timezone).format() 

當我試圖做到這一點我得到錯誤的時間。不知道怎麼去用那一刻

回答

4

這個工作你可以試試:

moment.utc(utcDate).tz(timezone).format() 

但它不應該的問題。他們應該產生:"2013-10-16T06:31:59-04:00"

它適用於我,在Chrome 30上運行,因此它可能與瀏覽器相關。

如果您在IE8上運行Moment.js 2.3.1或更低版本,那麼這是問題#1175的副作用,該問題已在2.4.0中修復。更新到最新版本應該可以解決問題。

5

使用+接線員給UNIX時間,則:

moment(+moment.utc(utcDate)) 

工作原理:

  • moment.utc(String)解析字符串,並返回一個時刻對象設置爲UTC時區。
  • +返回UNIX以毫秒爲單位偏移的時刻obejct
  • moment(Number)在用戶的本地時區創建一個新的時刻對象,使用在UNIX通過偏移。
+1

我upvoted這個答案,因爲沒有downvoting指定一個原因是沒用的。 –

4

具有相同問題的人:

您的日期ISO格式應包含的時區。這裏是momentjs允許的格式:

YYYY-MMM-DDTHH:mm:ss+00:00 

通知+00:00意味着它是UTC

例如

moment('2014-10-03T09:31:18+00:00').format() 

將terturn

"2014-10-03T17:31:18+08:00" 
0

即使你不不知道時區,你得到的客戶端抵消和使用像這樣,

let utcTime = "2017-02-02 08:00:13.567"; 
var offset = moment().utcOffset(); 
var localText = moment.utc(utcTime).utcOffset(offset).format("L LT"); 

試試這個JsFiddle