локальная машина и travis.ci возвращают разные результаты для `Date.toISOString()`

Я только что столкнулся со сценарием, в котором утверждение на new Date(1999, 0, 1, 1, 1, 1).toISOString() вызывает сбой теста при запуске в моем процессе ci (travis), но проходит на моем локальном компьютере.

let dString = new Date(1999, 0, 1, 1, 1, 1).toISOString();
expect(dString).to.be('1999-01-01T08:01:01.000Z');

При запуске на travis.ci я получаю ошибку утверждения:

ожидается, что '1999-01-01T01:01:01.000Z' будет равно '1999-01-01T08:01:01.000Z'

Это похоже на проблему с часовым поясом, но я не уверен, что понимаю, почему? На моем локальном компьютере при создании новой даты используется смещение UTC+8.

Однако при запуске на Трэвисе кажется, что он использует UTC+0?

Datetime & Timezones всегда меня смущают.

Как мне написать этот тест, чтобы он прошел в любой среде


person NSjonas    schedule 28.04.2019    source источник
comment
вы можете использовать ntpjs.org, это отправит вам временную метку в соответствии с вашим сетевым временем:   -  person Dupinder Singh    schedule 28.04.2019
comment
Какова цель этого теста?   -  person customcommander    schedule 29.04.2019
comment
@customcommander, очевидно, это не настоящий тест, который я провожу. Я упростил в соответствии с рекомендациями SO stackoverflow.com/help/mcve. Если вам просто интересно, это часть библиотеки построителя запросов для клиента API платформы.   -  person NSjonas    schedule 29.04.2019
comment
@DupinderSingh - еще раз, текущее системное время не имеет никакого отношения к этому вопросу, и поэтому рекомендация ntpjs не по теме. Пожалуйста, зарезервируйте такие предложения для вопросов, связанных с согласованием текущего времени со временем сервера. Спасибо.   -  person Matt Johnson-Pint    schedule 29.04.2019


Ответы (1)


Я использовал следующую строку для создания даты в формате UTC, и теперь она проходит на обеих платформах:

new Date(Date.UTC(1999,0,1,1,1,1)).toISOString();

person NSjonas    schedule 28.04.2019
comment
Верно. Вы обнаружили, что toISOString выдает строку в формате UTC, и поэтому, если вы передадите входные параметры в функцию Date.UTC, результат будет соответствовать вашим ожиданиям. - person Matt Johnson-Pint; 29.04.2019