Обратный отсчет до начала следующего месяца

Не понимаю как в javascript реализовать обратный отсчет до начала следующего месяца, постоянно не переопределяя параметр

var endTime = new Date("1 August 2021 0:00:00 GMT+03:00"); // здесь чтобы не писать число и месяц, а чтобы было автоматически :)
endTime = (Date.parse(endTime) / 1000);

var now = new Date();
now = (Date.parse(now) / 1000);

var timeLeft = endTime - now;

var days = Math.floor(timeLeft / 86400);
var hours = Math.floor((timeLeft - (days * 86400)) / 3600);
var minutes = Math.floor((timeLeft - (days * 86400) - (hours * 3600 )) / 60);
var seconds = Math.floor((timeLeft - (days * 86400) - (hours * 3600) - (minutes * 60)));
alert(new Date(Date.now()).getDay())

Ответы (1 шт):

Автор решения: yar85

Например, вот так можно реализовать:

countdownToNextMonth(document.body);


function countdownToNextMonth(el) {
  const tzOffsetMs = (new Date()).getTimezoneOffset() * 6e4,
        getDiffUTC = () => new Date(toDate - Date.now() + tzOffsetMs);
  let toDate = getNextMonthDate();    // собстна, получение даты следующего месяца
  loop();
  
  function loop() {
    let diff = getDiffUTC();
    if (diff < 0) {                   // если цикл застал смену месяца
      toDate = getNextMonthDate();    // надо получить дату уже следующего месяца
      diff = getDiffUTC();            // и снова пересчитать разницу дат
    }
    el.textContent = `${diff.getDate()}:${diff.toLocaleTimeString('ru-RU')}`;
    requestAnimationFrame(loop);
  }
  
  function getNextMonthDate() {
    const now = new Date();
    return new Date(now.getFullYear(), now.getMonth() + 1, 0);
  }
}
body { margin: 3rem 0; font: 3rem emoji; text-align: center; }

→ Ссылка