Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Convert thousands of seconds to h:mm:ss in moment.js

I've been going through the docs and I'm not sure what I'm doing wrong. I need to convert 7200 to 2:00:00. Seems easy? Some attempts:

var duration = 7200;
var display = moment().seconds(duration).format("h:mm:ss");

and...

var duration = 7200;
var display = moment.duration(duration, "seconds"); //can't chain on a format method?

The format comes back correct but the numbers are all wrong. If I use a duration of Math.round(7025.526) or 7025.526 I get 9:19:06 back.

How can I convert seconds to h:mm:ss successfully?

like image 883
discardthis Avatar asked Dec 05 '22 20:12

discardthis


2 Answers

When you use moment().seconds(duration) it will take the current date and time, and then set the seconds component to the value (spilling over into minutes and hours). If you try it at different times you will see that the result changes.

A duration object can't be formatted as a date, because it's simply not a date. It's a length of time without any defined starting or ending point.

To convert the seconds first create an empty moment object, which will be the current date and the time 0:00:00. Then you can set the seconds, which will spill over into minutes and hours.

You would want to use H rather than h to format the hours. That avoids getting times less than an hour as 12:nn:nn instead of 0:nn:nn:

var duration = 7200;
var display = moment({}).seconds(duration).format("H:mm:ss");
like image 147
Guffa Avatar answered Dec 08 '22 09:12

Guffa


let duration = seconds;
let hours = duration/3600;
duration = duration % (3600);

let min = parseInt(duration/60);
duration = duration % (60);

let sec = parseInt(duration);

if (sec < 10) {
  sec = `0${sec}`;
}
if (min < 10) {
  min = `0${min}`;
}
if (parseInt(hours, 10) > 0) {
  return (`${parseInt(hours, 10)} : ${min} : ${sec}`)
}
return (`${min} : ${sec}`)

You can do it manually by calculating hours minutes and seconds

like image 37
Yakirbu Avatar answered Dec 08 '22 08:12

Yakirbu