Я пытаюсь создать обратный отсчет с MomentJS (2.22.2
) и Rxjs (6.2.2
) interval
. Но когда я достигаю некоторых моментов времени, мой обратный отсчет сходит с ума и выдает отрицательные числа, где он должен был бы, например, вычесть день и начать в 23 часа.
Любая помощь о том, как я должен это исправить?
Пример
местное время: 2018-09-05T18:49
Время окончания: 2018-11-03T18:00
это приводит к:
Мой код
'this.days
', 'this.hours
', 'this.minutes
' & 'this.seconds
' - это локальные переменные, которые содержат строковое представление результирующего времени (строковый формат, потому что я хочу показать начальные нули)
interval(1000).subscribe(() => {
const now = moment();
let timeLeft = this.endDate.diff(now, 'milliseconds', true);
let endDate = moment(this.endDate); // Use 'moment' to make a new copy
// Days
const days = Math.floor(moment.duration(timeLeft).asDays());
console.warn(moment.duration(timeLeft).asDays());
this.days = Countdown.addLeadingZeros(days.toString(), 3);
endDate = endDate.subtract(days, 'days');
timeLeft = endDate.diff(now, 'milliseconds', true);
// Hours
const hours = Math.floor(moment.duration(timeLeft).asHours());
console.warn(Math.round(moment.duration(timeLeft).asHours()));
this.hours = Countdown.addLeadingZeros(hours.toString(), 2);
endDate = endDate.subtract(hours, 'hours');
timeLeft = endDate.diff(now, 'milliseconds', true);
// Minutes
const minutes = Math.floor(moment.duration(timeLeft).asMinutes());
this.minutes = Countdown.addLeadingZeros(minutes.toString(), 2);
endDate = endDate.subtract(minutes, 'minutes');
timeLeft = endDate.diff(now, 'milliseconds', true);
// Seconds
const seconds = Math.floor(moment.duration(timeLeft).asSeconds());
this.seconds = Countdown.addLeadingZeros(seconds.toString(), 2);
});
Кто-нибудь видит, что я здесь делаю неправильно или как я могу улучшить этот код?