2013-07-30 40 views
1

我一直在挖掘儘可能多的東西,我找不到,我似乎無法找到它是我在找什麼,所以我得出的結論是,我要麼不知道我在找什麼爲或不可能。無論哪種方式..使用Date()將指定時差的時區轉換爲時區。

我想實現的是一個時間戳的例子:1373439600000和給定的偏移量-12到12(這是正確的,儘可能範圍?),所以我可以拿上面的時間戳然後相應地減去它,並將該新時間戳傳遞給Date()函數,以便我可以將其操作以供人類閱讀。

偏移量是兩部分,它是在一個實例中指定的用戶,而在另一個實例中,如果未指定,它將默認爲本地getTimezoneOffset()。所以試圖找出如何採取這個範圍和工作。要做所有事情。

想法?我是否在正確的莊園接近這個?

我正在使用的時間戳已經是UTC,不確定這會有什麼不同。

回答

0

不幸的是,Date對象不提供可用於處理時區的設​​施。如果你有偏移量,你應該能夠以毫秒爲單位計算偏移量。然後,您可以將該值添加(減去?)到您的時間戳並使用它構建適當的Date

這有幫助嗎?

+0

它確實沒有它,我的整體走向,而且是從方向我問了這個問題。我現在的問題是計算分別從時間戳中加/減的偏移量。現在,當我使用'getTimezoneOffset()'時,返回值爲'420',我試圖弄清楚它是如何應用的?如果完全符合我想要做的所有事情,並且如果我不該採取什麼措施來獲取給定的範圍並根據此計算正確的偏移量。 – chris

+0

很難理解你想要做什麼,但根據文檔,'getTimezoneOffset()'以分鐘爲單位返回本地時區偏移量,所以你需要將它轉換爲毫秒並將其應用到你的時間戳。 –

+0

分鐘,呃,我必須撇清這一點。我想要做的總體是採取範圍-12到12,然後我猜在這一點上乘以60,然後乘以60000,然後從當前時間戳中加/減,以顯示時間基於範圍。總體。我們希望它基於用戶當前時區中提供的時間戳顯示,但爲用戶提供偏移量,因此如果他們正在與不同時區中的某個人通信,則可以將其切換爲相應地同步。然而,用戶界面大部分都是由JavaScript處理的,而且它的大型數據集可以讓人回想起來 – chris

3

JavaScript Date類型有很多的問題,但它的一個主要怪癖是它只能理解兩個時區 - UTC或本地。它使用UTC內部和某些屬性和功能,如.toUTCString(),否則它使用本地時區。

許多瀏覽器將接受從字符串解析Date時的偏移量,但僅用於設置UTC時間。出路上的任何東西都會再次轉換回當地時區。

幸運的是,有一些偉大的庫用於解決這些問題。 Moment.js非常適合這個。以下是你可能會尋找一個例子:

moment(1373439600000).zone(8).format("YYYY-MM-DD HH:mm:ss Z") 

// output: "2013-07-09 23:00:00 -08:00" 

當然,你可以根據需要格式化,或通過更復雜的區域像"+05:30"偏移。如果你需要使用一個實際的IANA時區,有moment-timezone配套項目,你可以做這樣的事情:

moment(1373439600000).tz('America/New_York').format("YYYY-MM-DD HH:mm:ss Z") 

// output: "2013-07-10 03:00:00 -04:00"