Почему преобразование даты в ISO несовместимо в средах javascript и как я могу это исправить? - PullRequest
0 голосов
/ 19 марта 2019

Локально, на Узле 10.15.13, new Date('01.01.2017') приводит к "2016-12-31T23: 00: 00.000Z" .

Тем не менее, в браузере или в образе докера (та же версия узла), который я создаю, это приводит к "Sun Jan 01 2017 00:00:00 GMT +0100 (Центральноевропейское стандартное время) ".

Что является причиной этого несоответствия и как его исправить, например, юнит тесты?

Ответы [ 3 ]

4 голосов
/ 19 марта 2019

Скорее всего, ваше расхождение связано с тем, что на вашем локальном компьютере (или сервере) установлен часовой пояс, а в контейнере докера нет.

Вот первый тест, который я выполнил:

$ docker run -ti node:10 node -
> new Date('01.01.2017');
2017-01-01T00:00:00.000Z

Тогда я подумал о том, что часовой пояс сервера может повлиять на ответ, и это действительно так:

$ docker run -ti node:10 env TZ=Europe/Brussels node  -
> new Date('01.01.2017');
2016-12-31T23:00:00.000Z

Вы можете соотнести эти два «системы»результаты поиска даты:

  • Без установки часового пояса
$ docker run -ti node:10 date
Mon Mar 18 22:17:43 UTC 2019
  • С настройкой часового пояса
$ docker run -ti node:10 env TZ=Europe/Brussels date
Mon Mar 18 23:17:59 CET 2019

Поскольку вы указали точную версию, которую пытались использовать, у меня все еще есть воспроизводимое поведение, с моей стороны:

  • Без установленного часового пояса
$ docker run -ti node:10.15.3 node -
> new Date('01.01.2017');
2017-01-01T00:00:00.000Z
  • С установленным часовым поясом
$ docker run -ti node:10.15.3 env TZ=Europe/Brussels node  -
> new Date('01.01.2017');
2016-12-31T23:00:00.000Z
2 голосов
/ 19 марта 2019

Строка "01.01.2017" является , а не строкой даты ISO, и будет проанализирована неоднозначно в зависимости как от вашего часового пояса, так и от вашей локали (т.е. используете ли вы день / месяц или месяц / день).

Чтобы получить однозначный разбор даты, используйте правильный формат ISO 8601, например,

2017-01-01T00:00:00Z

, где Z указывает, что отметка времени указана в UTC.

0 голосов
/ 19 марта 2019

Я понял проблему. Я установил часовой пояс, но базовый образ не принял его. Это узел: 10.15.13. Я закончил с узла: 10.10, который работает отлично. Позже я прокомментирую это на форуме докеров, если у меня будет время.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...