2015-10-05 52 views
0

我已經看到很多JavaScript的時區問題,但我沒有找到一個具體如下。Javascript - Timezoneoffset和LocaleString是不同的

當我在JS中使用新的Date()時,我從LocaleString獲得了不同的時區。 我已經在同事的一些瀏覽器中測試了這一點,並且在一些行爲中沒有問題。

例如,在我的瀏覽器我得到:

new Date() 
-> Mon Oct 05 2015 20:49:14 GMT-0200 (E. South America Daylight Time) 

new Date().toLocaleString() 
-> "10/5/2015, 7:50:11 PM" 

正確的時間是7:50 PM。爲什麼他們的行爲不同?最重要的是,我如何創建新的Date(),但是顯示格林威治標準時間19:50? 我不想手動設置時區,因爲我們有夏令時,並且在那段時間內,我將不得不更改代碼。

在此先感謝!

編輯:作爲瀏覽器通過新的Date()創建

+0

在我的情況下,新的日期()更改時,我關閉和打開Windows中的選項「自動調整爲夏令時」。基本上,新的Date()返回依賴於您的系統設置。 – Molda

+0

你能告訴我們你正在使用哪種瀏覽器和操作系統嗎? –

+0

從控制檯中的原始日期顯示的格式是UTC風格,但它恰好作爲發生在本地進行格式化的日期。您可以調整實際日期的offselt,使其在您的語言環境中正確顯示,使用偏移量:'new Date(new Date() - (new Date()。getTimezoneOffset()* 60000))'你可以在哪裏分第一個內部「新日期」爲現有日期。同樣,'new Date(new Date() - (new Date()。getTimezoneOffset()* 60000)).toISOString()。split(/ \ D + /)'給你本地日期部分以自我格式(如果需要的話)。 – dandavis

回答

0

我猜.toLocaleString()方法的結果是依賴於你的操作系統的語言環境,langiage和時區設置時表示,這不是白天的時間在這裏(巴西,聖保羅)呢。例如,如果我設置了不同的日期時間格式,您的腳本可能會在我的瀏覽器中失敗。我建議使用像Moment.Js這樣的庫,它提供了比JS提供的本地功能更好的時區處理和日期格式化功能。

在我的Chrome瀏覽器中,我收到了以下結果。我們3天前切換到DST:

enter image description here

+0

籲!現在一定是在配置我使用了moment.js + moment-timezone(這是一個非常好的JS庫..感謝你指出了這一點),我得到了同樣奇怪的行爲..'var a = moment(「2015-10-06T14:00:00Z」)'然後'a.tz('America/Sao_Paulo')。format 'ha z')'在上午10點回到我的上午11點。有趣的是,如果我使用紐約作爲時區,它也顯示了一個小時。關於我可以檢查的任何想法? (: –

0

在這裏發帖,以防萬一有人想出了同樣的問題.. 什麼似乎是我的問題是,我在Windows TZ變量設置EST5EDT。這可能是造成這個問題的原因。當我將它設置爲BST3這是我的時區時,即使使用「Automatically adjust timezone settings」,new Date().toLocaleTimeString也會返回同一時間(和正確時間)。

現在我只需要確認是否當我進入夏時制時它也會起作用。

相關問題