Как преобразовать секунды в 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
Ответы:
Из этого поста я бы попробовал это, чтобы избежать проблем с прыжками
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)}`; // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers }
Показать фрагмент кода
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)}`; // return pad(hours)+":"+pad(minutes)+":"+pad(secs); for old browsers } for (var i=60;i<=60*60*5;i++) { document.write(hhmmss(i)+'<br/>'); } /* function show(s) { var d = new Date(); var d1 = new Date(d.getTime()+s*1000); var hms = hhmmss(s); return (s+"s = "+ hms + " - "+ Math.floor((d1-d)/1000)+"\n"+d.toString().split("GMT")[0]+"\n"+d1.toString().split("GMT")[0]); } */
источник
`${pad(hours)}:${pad(minutes)}:${pad(secs)}`
Это похоже на ответ 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>
Он страдает теми же недостатками, например, если секунды превышают один день (86400), вы не получите того, чего ожидаете.
источник
Вы можете использовать плагин формата момента времени :
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>
См. Также эту скрипку
Upd: Чтобы избежать обрезки значений менее 60 секунд, используйте
{ trim: false }
:var formatted = duration.format("hh:mm:ss", { trim: false }); // "00:00:05"
источник
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();
источник
Как правильно использовать длительности moment.js? | Используйте moment.duration () в кодах
Во-первых, вам нужно импортировать
moment
иmoment-duration-format
.import moment from 'moment'; import 'moment-duration-format';
Затем используйте функцию продолжительности. Давайте применим приведенный выше пример: 28800 = 8 утра.
moment.duration(28800, "seconds").format("h:mm a");
🎉Ну, у вас нет вышеуказанной ошибки типа. 🤔У вас есть правильное значение 8:00 утра? Нет…, вы получите значение 8:00. Формат Moment.js работает не так, как должен.
💡 Решение состоит в том, чтобы преобразовать секунды в миллисекунды и использовать время UTC.
moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')
Ладно, сейчас 8:00. Если вы хотите 8:00 вместо 8:00 для интегрального времени, нам нужно сделать RegExp
const time = moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a'); time.replace(/:00/g, '')
источник
До 24 часов. Как
Duration.format
осуждается, с moment@2.23.0const seconds = 123; moment.utc(moment.duration(seconds,'seconds').as('milliseconds')).format('HH:mm:ss');
источник
Мое решение для изменения секунд (числа) на строковый формат (например: 'mm: ss'):
const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');
Напишите свои секунды вместо «S» в примере. И просто используйте «formattedSeconds» там, где вам нужно.
источник