javascript - examples - ¿Cómo uso format() en una duración de moment.js?
moment js timezone (15)
¿Hay alguna forma de que pueda usar el método de format
moment.js en objetos de duración? No puedo encontrarlo en ninguna parte de los documentos y no se ve que sea un atributo en los objetos de duración.
Me gustaría poder hacer algo como:
var diff = moment(end).unix() - moment(start).unix();
moment.duration(diff).format(''hh:mm:ss'')
Además, si hay otras bibliotecas que puedan acomodar fácilmente este tipo de funcionalidad, me interesarían las recomendaciones.
¡Gracias!
¿Qué tal javascript nativo?
var formatTime = function(integer) {
if(integer < 10) {
return "0" + integer;
} else {
return integer;
}
}
function getDuration(ms) {
var s1 = Math.floor(ms/1000);
var s2 = s1%60;
var m1 = Math.floor(s1/60);
var m2 = m1%60;
var h1 = Math.floor(m1/60);
var string = formatTime(h1) +":" + formatTime(m2) + ":" + formatTime(s2);
return string;
}
El mejor escenario para mi caso de uso particular fue:
var duration = moment.duration("09:30"),
formatted = moment.utc(duration.asMilliseconds()).format("HH:mm");
Esto mejora con la respuesta de @ Wilson, ya que no tiene acceso a datos de propiedad interna privada.
Estamos buscando agregar algún tipo de formato a las duraciones en moment.js. Ver https://github.com/timrwood/moment/issues/463
Algunas otras bibliotecas que podrían ayudar son http://countdownjs.org/ y https://github.com/icambron/twix.js
No necesita .format. Usa duraciones como esta:
const duration = moment.duration(83, ''seconds'');
console.log(duration.minutes() + '':'' +duration.seconds());
// output: 1:23
Encontré esta solución aquí: https://github.com/moment/moment/issues/463
Para formatear la duración del momento en una cadena
var duration = moment.duration(86400000); //value in milliseconds
var hours = duration.hours();
var minutes = duration.minutes();
var seconds = duration.seconds();
var milliseconds = duration.milliseconds();
var date = moment().hours(hours).minutes(minutes).seconds(seconds).millisecond(milliseconds);
if (is12hr){
return date.format("hh:mm:ss a");
}else{
return date.format("HH:mm:ss");
}
Si está dispuesto a utilizar una biblioteca de JavaScript diferente, numeral.js puede formatear los segundos de la siguiente manera (por ejemplo, 1000 segundos):
var string = numeral(1000).format(''00:00'');
// ''00:16:40''
Si se deben mostrar todas las horas (más de 24) y si ''0'' antes de las horas no es necesario, entonces el formateo se puede hacer con una línea corta de código:
Math.floor(duration.as(''h'')) + moment.utc(duration.as(''ms'')).format('':mm:ss'')
Utilice este complemento Formato de duración del momento .
Ejemplo:
moment.duration(123, "minutes").format("h:mm");
Utilizo la función de formato clásico en estos casos:
var diff = moment(end).unix() - moment(start).unix();
//use unix function instead of difference
moment.unix(diff).format(''hh:mm:ss'')
Esto es un truco porque la diferencia de tiempo se trata como una fecha de momento estándar, una fecha de época temprana, pero no importa nuestro objetivo y no necesita ningún complemento
Yo suelo:
var duration = moment.duration("09:30");
var str = moment(duration._data).format("HH:mm");
Y obtengo "09:30" en var str.
convertir la duración a ms y luego al momento:
moment.utc(duration.as(''milliseconds'')).format(''HH:mm:ss'')
si diff es un momento
var diff = moment(20111031) - moment(20111010);
var formated1 = moment(diff).format("hh:mm:ss");
console.log("format 1: "+formated1);
si usa angular, agregue esto a sus filtros:
.filter(''durationFormat'', function () {
return function (value) {
var days = Math.floor(value/86400000);
value = value%86400000;
var hours = Math.floor(value/3600000);
value = value%3600000;
var minutes = Math.floor(value/60000);
value = value%60000;
var seconds = Math.floor(value/1000);
return (days? days + '' days '': '''') + (hours? hours + '' hours '': '''') + (minutes? minutes + '' minutes '': '''') + (seconds? seconds + '' seconds '': '''')
}
})
ejemplo de uso
<div> {{diff | durationFormat}} </div>
// set up
let start = moment("2018-05-16 12:00:00"); // some random moment in time (in ms)
let end = moment("2018-05-16 12:22:00"); // some random moment after start (in ms)
let diff = end.diff(start);
// execution
let f = moment.utc(diff).format("HH:mm:ss.SSS");
alert(f);
var diff = moment(end).unix() - moment(start).unix();
moment.utc(moment.duration(diff).asMilliseconds()).format("HH:mm:ss.SSS");