Centos выдает неправильную дату и время для всех дат ниже 1905 года из NodeJS

Centos выдает неправильную дату и время для всех дат ниже 1905 года из NodeJS

У меня странная ситуация. Недавно я переехал из облака 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]$ 

Вывод даты путем установки часов на начало дня дает мне правильный вывод для текущей даты. Но то же самое отвечает разницей в 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-х годах.

Связанный контент