Подтвердить что ты не робот

Как конвертировать секунды в HH: mm: ss в moment.js

Как преобразовать секунды в HH:mm:ss?

В настоящее время я использую функцию ниже

render: function (data){
     return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");;
}

Это работает на chrome, но в firefox на 12 секунд я получаю 01:00:12 Я хотел бы использовать moment.js для совместимости с браузером

Я пробовал это, но не работал

render: function (data){
         return moment(data).format('HH:mm:ss');
}

Что я делаю неправильно?

ИЗМЕНИТЬ

Мне удалось найти решение без moment.js, которое следующим образом

return (new Date(data * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];

По-прежнему интересно, как я могу это сделать в moment.js

4b9b3361

Ответ 1

От этот пост Я постараюсь сделать это, чтобы избежать проблем с прыжками

moment("2015-01-01").startOf('day')
    .seconds(s)
    .format('H:mm:ss');

Я не запускал jsPerf, но я думаю, что это быстрее, чем создание новых объектов даты в миллион раз

function pad(num) {
    return ("0"+num).slice(-2);
}
function hhmmss(secs) {
  var minutes = Math.floor(secs / 60);
  secs = secs%60;
  var hours = Math.floor(minutes/60)
  minutes = minutes%60;
  return pad(hours)+":"+pad(minutes)+":"+pad(secs);
}

function pad(num) {
    return ("0"+num).slice(-2);
}
function hhmmss(secs) {
  var minutes = Math.floor(secs / 60);
  secs = secs%60;
  var hours = Math.floor(minutes/60)
  minutes = minutes%60;
  return pad(hours)+":"+pad(minutes)+":"+pad(secs);
}
function show(s) {
  var d = new Date();
  var d1 = new Date(d.getTime()+s*1000);
  var  hms = hhmmss(s);
  return (s+"s = "+ hhmmss + " - "+ Math.floor((d1-d)/1000)+"\n"+d.toString().split("GMT")[0]+"\n"+d1.toString().split("GMT")[0]);
}    

for (var i=60;i<=60*60*5;i++) {
 document.write(hhmmss(i)+'<br/>');
}

Ответ 2

Это похоже на ответ mplungjan, ссылающийся на другой пост, но более краткий:

const secs = 456;

const formatted = moment.utc(secs*1000).format('HH:mm:ss');

document.write(formatted);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

Ответ 3

Вы можете использовать плагин моментальный формат:

var seconds = 3820;
var duration = moment.duration(seconds, 'seconds');
var formatted = duration.format("hh:mm:ss");
console.log(formatted); // 01:03:40
<!-- Moment.js library -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>

<!-- moment-duration-format plugin -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-duration-format/1.3.0/moment-duration-format.min.js"></script>

Ответ 4

var seconds = 2000 ; // or "2000"
seconds = parseInt(seconds) //because moment js dont know to handle number in string format
var format =  Math.floor(moment.duration(seconds,'seconds').asHours()) + ':' + moment.duration(seconds,'seconds').minutes() + ':' + moment.duration(seconds,'seconds').seconds();