2017-10-16 151 views
1

使用tz()功能:時刻,時區格式不從<a href="https://momentjs.com/timezone/" rel="nofollow noreferrer">moment-timezone</a>如下返回預期的結果

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format() 
//returns '2017-10-15T13:53:43+08:00' 

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format('h:m A') 
//I expect to return '9:53 PM' but it returns '1:53 PM' 

最後,我想申請的fromNow()功能來格式化結果。但是,當我應用它時,它會使用初始時間戳並忽略應用的時區。

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').fromNow() 
//I expect to return '1 min ago' when actual time is 13:54 UTC (21:54 in HK) but it returns '8 hours ago' 

我在做什麼錯在這裏?

+0

這個問題有什麼問題? Google將這個主題搜索了幾個小時,上面的內容似乎是正確的方法。但我沒有得到預期的結果。如果任何人都可以引導我走向正確的方向,或者解釋downvote會更有幫助。 – sbkl

+0

'moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong')'創建一個日期/時間,對應** 1:53 PM在香港**。 'format'方法只是打印這個相同的值,所以目前還不清楚爲什麼你期望9:53 PM作爲輸出。 – 2017-10-17 11:06:31

+0

您是否也可以編輯問題並添加使用'fromNow()'的代碼,以及輸入和期望與實際輸出的示例?我不清楚什麼*「使用初始時間戳並忽略應用的時區」*的意思。 – 2017-10-17 11:12:24

回答

1

當你這樣做:

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong'); 

你正在創建的日期/時間對應於10月15日 2017年,在下午1時53分在香港 - 這,反過來,對應到2017-10-15T05:53:43Z5:53 AM,UTC)。

當調用format()功能:

moment.tz('2017-10-15 13:53:43','Asia/Hong_Kong').format(); 

它返回:

2017-10-15T13:53:43 + 08:00

+08:00部分只是UTC offset - 它只是告訴Hong Kong is 8 hours ahead UTC。但​​(1:53 PM在香港)與2017-10-15T05:53:43Z(UTC中的5:53)完全相同。這就是爲什麼fromNow(),當前時間爲13:54 UTC,返回8小時。

如果你想的日期/時間對應於下午1時53分在UTC,你應該使用utc()功能:

// October 15th 2017, 1:53 PM in UTC 
moment.utc('2017-10-15 13:53:43'); 

現在,噹噹前時間是13:54 UTCfromNow()將返回1分鐘(因爲日期/時間表示UTC時間爲1:53 PM)。

將其轉換爲香港時區,只需使用tz()功能:

// convert 1:53 PM UTC to Hong Kong timezone (9:53 PM) 
moment.utc('2017-10-15 13:53:43').tz('Asia/Hong_Kong').format('h:m A'); 

這將下午1時53分UTC轉換到香港時區(導致下午9點53):

+0

感謝您的解答和解釋! – sbkl

+0

@sbkl不客氣,很高興幫助! – 2017-10-17 22:58:01

相關問題