Преобразование разницы во времени в ЧЧ: ММ: СС с помощью moment / JS

#javascript #momentjs

#javascript #momentjs

Вопрос:

У меня есть startTime и endTime , на основе которого мне нужно создать обратный отсчет, который будет отображаться в HH:MM:SS формате постоянно.

Например:

 var endTime = 1601454312537 // Wed Sep 30 2020 13:55:12 
var startTime = 1600417512537 // Fri Sep 18 2020 13:55:12 
var diff = endTime - startTime
var duration = moment.duration(diffTime * 1000, 'milliseconds')
  

Затем разница передается в setInterval, где,

 setInterval(() => {
    duration = moment.duration(duration - interval, 'milliseconds');
    h = duration.hours(),
    m = duration.minutes(),
    s = duration.seconds() 
}, 1000);
  

Это дает мне правильное время, но когда оно превышает 24 часа, moment передает его через день.
Есть ли какой-либо способ сохранить все различия в формате HH: MM: SS?
Есть ли какая-либо функция moment, чтобы ограничить ее часами, минутами, секундами?

Комментарии:

1. Вызывает ли это какие-либо проблемы в коде, если он передает его как день?

2. Что-то вроде h= duration.days() * 24 duration.hours() …? (Может ли это вызвать у вас проблемы с переходом на летнее время в какой-то момент, я оставляю вам разобраться.)

3. @ShubhamSrivastava Мне нужно отобразить его в часах. Даже если его 24 , не имеет значения.

4. Посмотрите на это github.com/moment/moment/issues/463 ; Я бы предпочел использовать countdown.js для этого countdownjs.org

5. Решение @TasosBu, размещенное по вашей ссылке, работает. Спасибо

Ответ №1:

Это одна из функций, которую я использую, которая не требует momentjs , прямого способа сделать это в momentjs любом:

 // Duration in seconds
const durationString = duration =>
  `${
    Math.floor(duration / 60) > 9 ? Math.floor(duration / 60) : `0${Math.floor(duration / 60)}`
  } m ${duration % 60 > 9 ? Math.round(duration % 60) : `0${Math.round(duration % 60)}`}s`
  

Ответ №2:

Публикуя решение, которое сработало для меня —
вы можете дополнительно разделить строку minutesSeconds.

 var minutesSeconds = moment.utc(totalMilliseconds).format("mm:ss")
var hours = Math.floor(moment.duration(totalMilliseconds).asHours())
console.log("HH:MM:SS",hours   ':'   minutesSeconds)