2017-03-17 186 views
1

我正在使用全球化格式化每個語言環境的日期時間。格式日期時間特定時區

var Globalize = require('globalize'); 
var formatter = Globalize('en-US').dateFormatter(); 
formatter(new Date()); 

它工作的很好,但我想知道如果我可以格式日期的具體時區。這樣,它總是在本地計算機時區中格式化日期。例如,假設我的機器時區是PST。我可以使用全球化來格式化EST中的日期嗎?

+0

圖書館是否有關於如何設置時區的文檔? – epascarello

+0

時區不是格式,它(通常)是與UTC的偏移量,可以用許多不同的方式表示。常用的是非標準縮寫,如「EST」和「WAST」,軍事指示符如「K」和「Z」以及數字表示,如「+05:30」。 – RobG

回答

0

被盜從here

此解決方案通過使用getTimeOffset()(返回UTC時間和本地時間之間的時間差,以分鐘爲單位)功能查找UTC時間給定位置的偏移和將其更改爲毫秒,然後從UTC執行計算以返回不同時區的時間。

/** 
* function to calculate local time 
* in a different city 
* given the city's UTC offset 
*/ 
function calcTime(city, offset) { 

// create Date object for current location 
var d = new Date(); 

// convert to msec 
// add local time zone offset 
// get UTC time in msec 
var utc = d.getTime() + (d.getTimezoneOffset() * 60000); 

// create new Date object for different city 
// using supplied offset 
var nd = new Date(utc + (3600000*offset)); 

// return time as a string 
return "The local time in " + city + " is " + nd.toLocaleString(); 
} 

該解決方案可以正常工作,但在分鐘表示時區和調整UTC分鐘時更簡單。

請讓我知道這是否適合你!

+0

如果實現的* toLocaleString *方法包含時區,那麼它不會真正起作用,因爲它將顯示宿主時區,而不是其所在的時區。 – RobG

+0

雖然他可以使用不同的返回方法來顯示時區,但假設存在時區,對嗎?如果是這樣的話,那麼我認爲這可以解決他的一半問題... –

+1

是的,它的工作原理在很大程度上可以用分鐘來表示時區並調整UTC分鐘。這似乎期望時區以十進制小時表示,例如, 5.5,而它們更常用±hh表示:hh或±hhmm格式(例如+05:30)。 – RobG

-1

javascript函數new date()根據調用該函數時的機器時間生成日期/時間戳。因此,如果該功能是由阿拉斯加的一臺機器調用的,它將根據當時在阿拉斯加的當前時間生成日期/時間戳。

w3school.com對大多數與編碼有關的項目有很好的參考。你可以找到你的問題的答案here

+1

這不回答這個問題,w3schools不是最好的參考。 – epascarello

+0

我剛開始習慣Stack Overflow。你能解釋爲什麼w3schools不被認爲是一個很好的參考?我使用它們來學習新事物。 –