Задать вопрос
@danilr

Как сделать таймер обратного отсчёта на JS?

Есть начальное количество секунд, const delay = 300. Нужно каждую секунду выводить оставшееся время. Если каждую секунду в setInterval вычитать по единицы, то если вкладка станет не активной, браузер может замедлить этот счётчик, что приведёт к несоответствию времени.
Есть идея исходить от текущего времени - и времени запуска таймера.
const startTime = new Date(). Но как это правильно реализовать? И ещё вопрос, как из даты получить время в секундах? Без миллисекунд, чтобы просто обрубал последние 3 цифры, а не делить на 1000 и округлял?
  • Вопрос задан
  • 390 просмотров
Подписаться 1 Средний Комментировать
Решения вопроса 2
TTATPuOT
@TTATPuOT
https://code.patriotovsky.ru/
https://www.w3schools.com/howto/howto_js_countdown.asp - setInterval абсолютно нормально работает.

Метку времени unix нельзя выводить не в миллисекундах, поэтому делите всегда на 1000.
Ответ написан
@danilr Автор вопроса
Лучшее решение - это записать в константу в момент старта счётчика время, потом каждую секунду высчитывать время текущее и сколько осталось.
const delay = 300000; // 300 секунд таймера (5 мин), статичное и не меняется
const resentDelay = 30000; // начальное время остаточного времени счётчика и постоянно уменьшается:
const timeStart = Date.now(); // время когда счётчик запустился (тип number в миллисекундах)
const currentDelay = Math.round( (resentDelay - (Date.now() - timeStart))/1000 ); /* вычисляем оставшееся время счётчика, вычисление это делаем каждую секунду в  setInterval*/
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы