
我的情況很奇怪。最近我從 Azure 雲端遷移到 Digital Ocean 伺服器。我使用的是 Nodejs 版本 v10.15.0 和 Centos 7。
我的 timedatectl 輸出是
[deploy@prod-ca-api install-scripts]$ timedatectl
Local time: Tue 2019-03-19 15:34:21 IST
Universal time: Tue 2019-03-19 10:04:21 UTC
RTC time: Tue 2019-03-19 10:04:21
Time zone: Asia/Kolkata (IST, +0530)
NTP enabled: no
NTP synchronized: yes
RTC in local TZ: no
DST active: n/a
[deploy@prod-ca-api install-scripts]$
透過設定一天開始的時間來輸出日期為我提供了當前日期的正確輸出。但對於 1900 年以下的日期,同樣會做出 24 分鐘差異的回應。
我的時區設定為 IST (+5.30)
[deploy@prod-ca-api install-scripts]$ date
Tue Mar 19 15:36:57 IST 2019
[deploy@prod-ca-api install-scripts]$ node
> let a = new Date()
undefined
> a.setHours(0,0,0,0)
1552933800000
> a
2019-03-18T18:30:00.000Z
> a = new Date('1700-01-01')
1700-01-01T00:00:00.000Z
> a.setHours(0,0,0,0)
-8520357208000
> a
1699-12-31T18:06:32.000Z
以前在Azure伺服器中,我曾經使用1699-12-31T18:30:00.000Z
而不是1699-12-31T18:06:32.000Z
答案1
我認為正確的時間其實應該是18點06分。讀完這篇文章後,我得出這樣的結論:https://www.dailyo.in/variety/indian-standard-time-time-zones-bagan-time/story/1/17080.html
本文的相關部分是:
印度標準時間(印度標準時間)和鄰國斯里蘭卡(斯里蘭卡標準時間)的偏移量為 UTC+05:30,這並不奇怪。
這很清楚並且容易理解。
印度直到 1906 年才沒有官方時區;我們有三個主席國:孟買、加爾各答、馬德拉斯,這三個城市也有三個當地時間,具體時間取決於它們在經度上的位置。由此創建的三個時區,其周圍和附近的所有州或城市都遵循該時區。
這就是有趣的地方。印度顯然直到 1906 年 1 月 1 日才擁有官方時區。
加爾各答設定為 UTC+05.54,使其成為當前 IST 的 +00:24。
這可以解釋 NodeJS 中的奇怪行為(某種程度上)。再次符合你的研究。
這段歷史還有很多內容,但無論如何,我得出的結論是,在這兩種情況下,時間都可能是正確的。很難確定這些舊日期的精確時間,因為整個時區甚至不存在。一般來說,您不應該相信舊日期,因為時區可能非常令人困惑,而且國家/地區也可能使用不同的日曆。例如,也沒有使用 1600 秒內的日期的實際用例。