Centos дает неверное время для всех дат ниже 1905 года от NodeJS
У меня странная ситуация. Недавно я перешел из облака Azure на сервер Digital Ocean. Я использую Nodejs версии 10.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]$
Вывод даты путем установки часов для начала дня дает мне правильный вывод для текущей даты. Но то же самое с 24-минутной разницей дат ниже 1900 года.
Мой часовой пояс в 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 года; у нас было три президентства: Бомбей, Калькутта, Мадрас и три местных времени для трех городов, в зависимости от того, где они попали на долготу. За тремя часовыми поясами, созданными таким образом, следовали все штаты или города вокруг и вблизи него.
Вот где это становится интересным. По всей видимости, в Индии не было официального часового пояса до 1 января 1906 года. Это соответствует вашим эмпирическим исследованиям.
Калькутта была установлена на UTC + 05,54, что составляет +00:24 текущего IST.
Это объясняет странное поведение в NodeJS (вроде). Опять в соответствии с вашими исследованиями.
В этой истории есть гораздо больше, но в любом случае я бы пришел к выводу, что время может быть правильным в обоих этих случаях. Очень трудно определить точное время для этих старых дат, потому что весь часовой пояс даже не существует. В общем, не стоит доверять старым датам, потому что часовые пояса могут сбивать с толку, и страны могут также использовать разные календари. Также нет реалистичных вариантов использования дат, например, в 1600-х годах.