2014-10-18 192 views
2

我不得不轉換UTC當地時間要求基於用戶時區如何將UTC時間轉換爲本地時間的javascript

我有兩個參數:UTC時間和用戶的時區作爲一個字符串

即 0,1,2,3 ... 12(時區) 0,-1,-2,-3 ...- 12(時區)

var utc = "2014-10-18T06:14:41.512Z" 
tz = 5.5(Indian Standard Time) 

預期結果週六2014年10月18日11點44分:28 GMT + 0530

我已經試過時刻JS

moment("2014-10-18T06:14:41.512Z").zone('+05:30').format('YYYY-MM-DD HH:mm') 

,結果是正確的。

但是,當我的時區切換到其他它沒有顯示預期的結果 試圖

moment("2014-10-18T06:14:41.512Z").zone('+12:00').format('YYYY-MM-DD HH:mm') 

結果「2014年10月18日18:14」預期2014年10月18日19: 18

12是新西蘭時區。請幫我解決這個問題。謝謝

回答

2

入住這

var date = new Date('2014-10-19 17:00:34 UTC'); 
date.toString(); 


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

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

還要檢查

http://www.digitoffee.com/programming/get-local-time-utc-using-moment-js/94/

+0

謝謝你,但我在服務器端執行此操作。我有用戶在我的手時區,有沒有辦法在服務器端轉換它使用moment.js – Dibish 2014-10-18 06:41:29

+0

@Dibish更新檢查是否適合你 – 2014-10-18 07:52:19

+0

謝謝,但我不知道區,即「美國/ New_York」。我只有區域號碼5.5,例如+05:30 – Dibish 2014-10-18 08:35:22

1

時區是偏移。偏移量僅爲時區的部分。許多時區在兩個不同的偏移量之間交替,以計入daylight saving time。時區必須考慮到這一點,包括夏時制開始和結束的具體日期和時間,以及時區可能存在的任何變化歷史記錄。

你給的新西蘭案例就是一個很好的例子。你說「12是新西蘭時區」,因此預計從New Zealand is in DST for that date,從UTC 6:14到新西蘭當地時間的轉換將是19:14。 - 13小時後。

但12並不完全代表新西蘭。距UTC僅12小時的距離。還有很多其他時區以不同的方式使用相同的偏移量。例如,元帥島使用UTC + 12全年,而不是夏令時。

您應該確實閱讀the timezone tag wiki - 特別是標題爲「時區!=偏移」的部分。

您應該用tz database代表完整IANA標識符代替時區,而不是偏移量。例如,美國東部時間是"America/New_York",印度時間是"Asia/Kolkata",新西蘭時間是"Pacific/Auckland"。你可以在the list on Wikipedia找到更多。

您可以使用moment-timezone在JavaScript中使用它們。

moment("2014-10-18T06:14:41.512Z").tz('Pacific/Auckland').format('YYYY-MM-DD HH:mm') 

// Output: "2014-10-18 19:14" 

我還涵蓋了非常詳細這些主題在我Date and Time Fundamentals課程Pluralsight.com。

+0

所有優點。時區比偏移更多。布里斯班和悉尼的經度相同,但悉尼有DST,布里斯班沒有。所以我們全年保持+10,他們在+10和+11之間擺動。 – 2015-12-29 18:24:25

2

要堅持國際標準,您需要格式化您的UTC日期包括time delimiter Tzone designator Z

ž對於ž主任UTC又名ž烏魯時間偏移的時區標誌。 您可以閱讀更多關於International Date Standard ISO8601格式的詳細信息here

一旦你符合國際標準的跨瀏覽器友好的方法很簡單:

new Date('2014-10-19T17:00:34Z'); 
// Sun Oct 19 2014 12:00:34 GMT-0500 (Central Daylight Time) 
相關問題