我已經搜索了很多,但找不到對此的解釋,在我看來,getTime(). 檔案指出:
getTime() 始終使用 UTC 表示時間。例如,一個時區的客戶端瀏覽器 getTime() 將與任何其他時區的客戶端瀏覽器相同。
根據這個陳述,我的理解是,例如
1. new Date (Date.UTC(2021,8,1)).getTime() // UTC Date 1.Sep.2021 00:00:00
2. new Date (2021,8,1).getTime() // Local (UTC 1) Date 1.Sep.2021 00:00:00
應該提供相同的毫秒數。但我得到的結果是:
1. 1630454400000
2. 1630447200000 // 1 hour (3600000 ms) missing
問題 A:自 1970 年 1 月 1 日以來,物理上已經過去了相同的時間。根據檔案,為什么結果不相等(夏令時也很重要!)就像他們應該的那樣?
問題B:如果行為是正確的,為什么少了一個小時?不是應該多一小時嗎?邏輯上 UTC 1 提前一小時。
uj5u.com熱心網友回復:
好的,我找到了造成混亂的原因。感謝你的幫助!尤其是 Chris G,他為我指明了正確的方向。這是搞砸了我的大腦的原因;-)
所有根本不明白為什么會出現問題的人,很可能是從普通網路瀏覽器用戶的角度來看這個問題的。在這種情況下,如果 UTC 1 中的用戶打開一個網站,該網站呼叫getTime()1. Sept. 2021 07:00:00,則會導致:
now Date ( 2021, 8, 1, 7, 0, 0 ).getTime()
現在,如果第二個用戶在 UTC 0 的同一時刻做同樣的事情,這將導致:
now Date ( 2021, 8, 1, 6, 0, 0 ).getTime()
那么當然我們得到了相同的結果!我的問題是我假設呼叫:
now Date ( 2021, 8, 1, 7, 0, 0 ).getTime()
在不同的時區應該給出相同的結果。事實并非如此!現在你可能會問為什么有人需要這個。原因很簡單。我正在用 Electron 開發一個小甘特工具,在那里我需要比較/減去日期。當然,我不需要上述內容為真(提供相同的值),但是我遇到了這個問題,因為在通過將日期轉換為 ms 來減去日期時,我沒有得到可整除的毫秒數getTime()。我期望根據檔案,它getTime()會在每個時區給出相同的值,以獲得不受時區或夏令時影響的絕對值,用于計算。因此我期望例如:
now Date(2021,4,1,0,0,0).getTime() - now Date(2021,11,1,0,0,0).getTime()
應該給出一個毫秒數,它應該可以被 86400000(一天)完全整除。但事實并非如此。原因是因為夏令時,第二個日期晚了1小時!
結論
當查看相同的時間點(例如 UTC 0 06:00 和 UTC 1 07:00)時,檔案中的陳述是正確的,但在查看相同的小時數(例如 UTC 0 07:00)時則不然和 UTC 1 07:00)。這就是讓我困惑的地方。也許這種解釋對其他人也有幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/400131.html
標籤:javascript 日期 世界标准时间 时代 获取时间
