2017-05-22 56 views
0

鉻不給上的日期轉換一個正確的結果:的Chrome 58.0.3029.110版本在正確的本地時區未進行轉換日期

日期:「2017-05-22T14:00:00」

在做這鉻控制檯:

​​

輸出是:

Mon May 22 2017 14:00:00 GMT+0530 (IST) 

這是錯誤的,因爲我在IST。它應該有相當給定的輸出爲

Mon May 22 2017 19:30:00 GMT+0530 (IST) 

Safari正在給出正確的結果。鉻是之前,但我認爲最新的更新是有問題。

發現在日期字符串中追加Z會得到正確的日期值。

new Date("2017-05-22T14:00:00Z"); 
+0

是否有任何技術原因使用字符串格式的構造函數? [MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date)對其進行了非常好的總結:*使用Date構造函數解析日期字符串(以及Date.parse,它們是等同的)由於瀏覽器差異和不一致性而受到強烈的阻止* –

+0

以服務的格式接收日期字符串「2017-05-22T14:00:00」,我無法修改服務。應該怎樣才能獲得正確的結果? –

+0

報告鉻:https://bugs.chromium.org/p/chromium/issues/detail?id = 725080&can = 2&start = 0&num = 100&q =&colspec = ID%20Pri%20M%20Stars%20ReleaseBlock%20Component%20Status%20Owner%20Summary%20OS%20Modified&groupby =&&sort = –

回答

2

輸入值被正確解釋。 2015年的ECMAScript(ES6)部分20.3.1.16狀態:

如果時區偏移量是不存在的,日期時間被解釋爲當地時間

這也符合ISO-8601標準。

在以前版本的ECMAScript中,假定沒有提供偏移量時,UTC。這違背了ISO-8601,並且在各種環境中不一致地實施。

如果你想輸入被解釋爲UTC,那麼你應該提供一個偏移量,無論是+00:00,或Z作爲輸入字符串的一部分。

但是,如果您正在討論如何在登錄到調試控制檯時顯示Date對象,這在規範中未定義。在某些環境中,您將看到date.toString()的輸出,它以非標準格式顯示本地日期和時間,在其他環境(如FireFox)中,您將看到date.toISOString()的輸出,該輸出顯示UTC日期和時間採用ISO-8601格式。

沒有關於哪個顯示的規格,所以兩者都是有效的。如果你想查看特定的輸出,不要僅僅記錄一個對象,而是在返回一個字符串的對象上調用一個函數並記錄它。

+0

因此,這是否意味着它之前不正確,因爲對於相同的日期時間字符串,即在結束時沒有「Z」,chrome會將其視爲UTC並將其轉換爲localTimeZone?我在Chrome更新後看到了這個。 –

+0

這也意味着Safari瀏覽器做錯了,因爲safari正在考慮datetime沒有「Z」作爲UTC,並將它轉換爲本地時區,就像之前Chrome一樣。 –

+0

通過ISO8601,沒有偏移的值是本地時間。 ES5.1和更低版本有這個錯誤,他們在ES6中糾正它。以前,有些瀏覽器把它當作本地時間,有些則把它當作UTC。如今,所有的瀏覽器都應該把它當作當地時間。它是最新版本的Safari嗎?如果是這樣,他們有一個錯誤。 –

相關問題