2014-01-15 206 views
21

我正在嘗試使用時區偏移和UTC時間戳調整時間。Moment.Js:使用UTC和時區偏移的偏移日期

我運行下面的代碼:

var date = { 
    utc: '2013-10-16T21:31:51', 
    offset: -480 
} 

var returnDate = moment(date.utc).utc().zone(date.offset).format('MM/DD/YYYY h:mm A'); 

我所期待的是:10/16/2013 1:31 PM但我與10/17/2013 9:31 AM

+0

是什麼日期看,如果你刪除'.utc()區(date.offset)'等等。?這樣你就可以調用'.format()'。 –

+0

另外,如果查看文檔[here](http://momentjs.com/docs/#/parsing/string-format/)並向下滾動一下。它的內容如下:「除非指定時區偏移量,否則解析字符串將在當前時區中創建一個日期。」 –

+0

我發佈了不良數據,請讓我糾正此問題。 sec – Neil

回答

16

這裏結束了對我工作:

var date = { 
    utc: '2013-10-16T21:31:51', 
    offset: 480 
} 

var returnDate = moment.utc(date.utc).zone(date.offset).format('MM/DD/YYYY h:mm A'); 

如果您注意到了,我將偏移量更改爲正數。這給了預期的結果。如果偏移量爲-480,則輸出爲10/17/2013 5:31 AM

有一個moment#UTC方法將日期初始化爲UTC與當地時間。

+4

對於其他人在這篇文章中磕磕絆絆,你可以使用'offset'字符串,它可能更清晰:'zone(' - 07:00')'(PST例子) – potench

+1

'moment.zone()'在一會兒之後被棄用2.9.0 – theChinmay

+5

zone()已被棄用,每個人都應該使用utcOffset(),而不要在這裏看到https://github.com/moment/moment/issues/1779 – medBo

2

我使用jsTimezoneDetect庫來確定時區名稱而不是偏移量。

然後在一個UTC時間戳使用:

timestamp = moment.tz(timestamp, tz.name()); 
timestamp.format('MM/DD/YYYY h:mm A');