У меня есть функция, которая возвращает объект Date, модифицированный дельтой, например:
export function getDate(delta: string = "", start?: Date): Date {
const date = start ? new Date(start.getTime()) : new Date();
const rel = delta.split(" ").join("");
const [, sign, years, months, days, hours, mins, secs] = toArray(/([+-])?(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)d)?(?:(\d+)h)?(?:(\d+)m)?(?:(\d+)s)?/.exec(rel) as ArrayLike<string>);
const plus = sign !== "-";
if (years) date.setFullYear(date.getFullYear() + (plus ? +years : -years));
if (months) date.setMonth(date.getMonth() + (plus ? +months : -months));
if (days) date.setDate(date.getDate() + (plus ? +days : -days));
if (hours) date.setHours(date.getHours() + (plus ? +hours: -hours));
if (mins) date.setMinutes(date.getMinutes() + (plus ? +mins: -mins));
if (secs) date.setSeconds(date.getSeconds() + (plus ? +secs : -secs));
return date;
}
Кажется, что он отлично работает в узлах и хроме, и мои тесты проходят локально.Но когда я нажимаю на npm, тесты в Travis CI терпят неудачу, например: Travis CI
К чему я, к сожалению, не обращаю внимания, - почему первый тестовый проход и второй провал ровно через 1 час,Есть ли какая-то магия CET / UCT, которую мне не хватает?Не упускаю ли я что-то особенное из-за того, как работает объект Date в различных версиях узла?
Вы можете увидеть тестовый код в travis (ссылка выше), но я добавлю его и здесь:
const now = new Date();
let pos = Util.getDate("+1Y2M3d4h5m6s", now);
expect(now.getTime() - pos.getTime()).toBe(-37166706000); // passes locally and in travis
let neg = Util.getDate("-1Y2M3d4h5m6s", now);
expect(now.getTime() - neg.getTime()).toBe(36903906000); // passes locally but fails in travis
Благодарен за мудрость.