我注意到該toTimeString方法有以下奇怪的行為。
const date1 = new Date("2022-09-23T00:00:00.00Z")
const date2 = new Date()
date1.toTimeString()
//17:00:00 GMT-0700 (Pacific Daylight Saving Time)
date2.toTimeString()
// 15:06:43 GMT-0800 (Pacific Standard Time)
我還注意到date1even 的結果取決于設備區域設定(至少對于 Mac)
date1.toTimeString()
// if region is set to Canada
// 17:00:00 GMT-0700 (Pacific Daylight Saving Time)
// if region is set to United States
// 17:00:00 GMT-0700 (Pacific Daylight Time)
另一個觀察
date2.toTimeString()
// this is the result for both United States and Canada
// 15:06:43 GMT-0800 (Pacific Standard Time)
幾個問題
為什么結果取決于日期的構造方式?(
new Date("2022-09-23T00:00:00.00Z")對new Date)對于
new Date("2022-09-23T00:00:00.00Z"),為什么結果取決于設備設定?當沒有傳遞任何引數時,結果似乎是一致的,例如
new Date()。我們是否可以假設無論設備設定如何,這都會產生一致的時區名稱?
注意:我也注意到了相同的行為date-fns-tz
編輯:在上面添加了一個例子。
另一個問題: 4.與問題2相反,new Date().toTimeString()不受區域設定的影響。為什么會這樣
編輯 2:我想通了。對于實行夏令時的國家。的行為toTimeString()將根據時間戳落入的時間產生不同的時區。
將此執行緒留在這里,因為它可能對其他人有幫助
uj5u.com熱心網友回復:
2022-09-23第一種情況,您使用日期和時間的字串表示呼叫 Date 建構式,00:00:00 (GMT offset 0)它回傳 09/23/2022 00:00:00 的 Date 物件實體。第二種情況,您呼叫空 Date 建構式,它回傳具有當前日期和時間的 Date 物件實體。接下來,當您呼叫該
toTimeString()方法時,它會回傳以本地時區解釋的 Date 物件的時間部分(請參閱更多https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/到時間字串)。如果您想更好地獲取本地時區名稱,請參閱此處如何在 JavaScript 中獲取時區名稱?
uj5u.com熱心網友回復:
- 為什么結果取決于日期的構造方式?(新日期(“2022-09-23T00:00:00.00Z”)對比新日期)
由于尾隨“Z”,時間戳“2022-09-23T00:00:00.00Z”被決議為零偏移量。這實際上使它成為 UTC。
呼叫為當前日期和時間new Date()創建一個Date實體。toTimeString根據系統設定回傳Date實體表示的時間。因此,對于給定的實體,如果您將系統設定中的位置更改為具有不同偏移量的位置,您將獲得不同的時間。
如果區域設定適用于遵守夏令時 (DST) 的地方,那么在 DST 生效和未生效的一年中的不同時間,您還將獲得不同的日期偏移量(和民用時區名稱)。
- 對于 new Date("2022-09-23T00:00:00.00Z"),為什么結果取決于設備設定?
無論系統設定如何,創建的Date實體都完全相同,因為偏移量在時間戳中固定為 0。toTimeString的結果取決于系統設定,因為這是它從中獲取主機偏移量和民用時區名稱的資訊。
- 當沒有傳遞任何引數時,結果似乎是一致的,例如 new Date()。我們是否可以假設無論設備設定如何,這都會產生一致的時區名稱?
否。時區名稱未標準化,并且根據 ECMA-262依賴于實作。但是,實際偏移量應該是一致的。
我建議閱讀Why does Date.parse give incorrect results? 一些背景。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/536448.html
