Время форматирования от секунд до ЧЧ: ММ: СС в обратном отсчете - PullRequest
0 голосов
/ 27 марта 2020

У меня есть этот простой обратный отсчет:

function offer_countdown_timer(countdown_start, countdown_time, update, complete) {
  var start = new Date(countdown_start).getTime();
  var interval = setInterval(function() {
    var now = countdown_time-(new Date().getTime()-start);
    if( now <= 0) {
      clearInterval(interval);
      complete();
    } else {
      update(Math.floor(now/1000));
    }
  },100); // the smaller this number, the more accurate the timer will be
}

и здесь я называю это:

<script>
    offer_countdown_timer(
      '<%= s.created_at%>',
      3600000, // 1 hour in milliseconds
      function(timeleft) { // called every step to update the visible countdown
        var txt = timeleft+' seconds';
        $('#tender_countdown_<%= s.id %>').html(txt);
        //$('#tender_countdown_<%= s.id %>').html(moment(txt).format('HH:mm:ss'));        
        },
      function() {
        $('#product_<%= s.id %>').html('Offer has expired!');
      }
    );
</script>

Вывод этого:

773 seconds

(и идет обратный отсчет)

Я бы хотел увидеть что-то вроде этого (ЧЧ: сс: мм):

00:12:53

(и отсчет):

I попробовал это использовать это (с использованием Момента. js lib - https://momentjs.com/docs/):

$('#tender_countdown_<%= s.id %>').html(moment(txt).format('HH:mm:ss'));    

Но в этом случае вывод такой:

01:00:00

Информация о времени неверна и не ведет обратный отсчет. Это почему? Как правильно отформатировать время обратного отсчета?

Спасибо

1 Ответ

0 голосов
/ 27 марта 2020

Количество секунд - это абстрактная продолжительность времени, а не дата, представляющая определенный c момент времени. Конструктор Moment ожидает, что вы передадите ему строку даты.

Moment имеет объект Duration, который может анализировать ваши данные. У него пока нет хороших функций форматирования, но вы можете достаточно легко создать желаемый результат:

var txt = 773;
var m = moment.duration(txt, "s");
var output = m.hours() + ":" + m.minutes() + ":" + m.seconds();
console.log(output);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>

Подробнее см. https://momentjs.com/docs/# / длительности / .

...