@Holodny

Как остановить обратный отсчет?

Есть счетчик обратного отсчета

function countDown() {
      let standart = moment().tz("Europe/Moscow").format('YYYY-MM-DD HH:mm');
      let nowDay = moment(standart, 'YYYY-MM-DD HH:mm').format("YYYY-MM-DD HH:mm");
      var eventDay = moment('2023-05-20 18:00', 'YYYY-MM-DD HH:mm').format("YYYY-MM-DD HH:mm");
      let timers = moment(nowDay, 'YYYY-MM-DD HH:mm').countdown(eventDay, "YYYY-MM-DD HH:mm").toString();
      let countDw = guild.channels.cache.get("1105888140683448792");
      countDw.setName("Осталось: " + timers);
   }
   setInterval(countDown, 5 * 60 * 1000);


Когда счетчик доходит до конца, он начинает отсчет вперед. Т.е. в 18:01 он пишет, что осталась 1 минута, в 18:02 - осталось 2 минуты и т.д.

Как остановить отсчет?
  • Вопрос задан
  • 94 просмотра
Пригласить эксперта
Ответы на вопрос 1
neuotq
@neuotq
Прокрастинация
countdown возвращает объект с разными свойствами в тч со свойством value, которое при случае когда дата "от" больше даты "до" будет отрицательным. Значит нужно добавить проверку на это значение.

Примерно так:

const standart = moment().tz("Europe/Moscow");  
const nowDay = moment(standart, 'YYYY-MM-DD HH:mm');
  
const eventDay = moment('2023-05-21 02:05', 'YYYY-MM-DD HH:mm'); 


const countDown = () => {     
  const timers = moment(nowDay, 'YYYY-MM-DD HH:mm')
    .countdown(eventDay, "YYYY-MM-DD HH:mm");
  console.log(timers.value)
  if(interval && timers.value <= 0) {
        clearInterval(interval)
   }
      console.log(timers.toString())
   }

const interval = setInterval(countDown, 1000);


Под себя адаптируйте этот код. Ну и конечно от momentjs и компашки нужно избавиться, но это уже отдельная легаси история.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы