¿Cómo puedo convertir segundos a HH:mm:ss
?
En este momento estoy usando la función a continuación
render: function (data){
return new Date(data*1000).toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, "$1");;
}
Esto funciona en Chrome, pero en Firefox durante 12 segundos, 01:00:12
me gustaría usar moment.js para la compatibilidad entre navegadores.
Intenté esto pero no funciona
render: function (data){
return moment(data).format('HH:mm:ss');
}
¿Qué estoy haciendo mal?
EDITAR
Me las arreglé para encontrar una solución sin moment.js que es la siguiente
return (new Date(data * 1000)).toUTCString().match(/(\d\d:\d\d:\d\d)/)[0];
Todavía tengo curiosidad por saber cómo puedo hacerlo en moment.js
javascript
momentjs
QGA
fuente
fuente
Respuestas:
Desde esta publicación , probaría esto para evitar problemas de salto.
moment("2015-01-01").startOf('day') .seconds(s) .format('H:mm:ss');
No ejecuté jsPerf, pero creo que esto es más rápido que crear nuevos objetos de fecha un millón de veces
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 }
Mostrar fragmento de código
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]); } */
fuente
`${pad(hours)}:${pad(minutes)}:${pad(secs)}`
Esto es similar a la respuesta a la que mplungjan hace referencia en otra publicación, pero más concisa:
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>
Sufre de las mismas advertencias, por ejemplo, si los segundos superan un día (86400), no obtendrá lo que espera.
fuente
Puede usar el complemento de formato de duración de momento :
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>
Ver también este violín
Upd: Para evitar recortar valores menores a 60 segundos, use
{ trim: false }
:var formatted = duration.format("hh:mm:ss", { trim: false }); // "00:00:05"
fuente
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();
fuente
¿Cómo usar correctamente las duraciones de moment.js? | Utilice moment.duration () en los códigos
Primero, necesita importar
moment
ymoment-duration-format
.import moment from 'moment'; import 'moment-duration-format';
Luego, use la función de duración. Apliquemos el ejemplo anterior: 28800 = 8 am.
moment.duration(28800, "seconds").format("h:mm a");
🎉Bueno, no tiene el error de tipo anterior. 🤔 ¿Obtiene un valor correcto a las 8:00 am? No…, el valor que obtienes es 8:00 a. El formato Moment.js no funciona como se supone.
💡La solución es transformar segundos en milisegundos y usar la hora UTC.
moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a')
Está bien, ahora llegamos a las 8:00 am. Si desea 8 am en lugar de 8:00 am para el tiempo integral, necesitamos hacer RegExp
const time = moment.utc(moment.duration(value, 'seconds').asMilliseconds()).format('h:mm a'); time.replace(/:00/g, '')
fuente
Hasta las 24 hrs. Como
Duration.format
está en desuso, con [email protected]const seconds = 123; moment.utc(moment.duration(seconds,'seconds').as('milliseconds')).format('HH:mm:ss');
fuente
Mi solución para cambiar segundos (número) a formato de cadena (por ejemplo: 'mm: ss'):
const formattedSeconds = moment().startOf('day').seconds(S).format('mm:ss');
Escriba sus segundos en lugar de 'S' en el ejemplo. Y simplemente use 'formattedSeconds' donde lo necesite.
fuente