Comment puis-je utiliser format () sur une durée de moment.js?

Est-ce que je peux utiliser la méthode de format moment.js sur les objets de durée? Je ne peux pas le trouver n'importe où dans les docs et il ne semble pas être un attribut sur les objets de durée.

Je voudrais pouvoir faire quelque chose comme:

 var diff = moment(end).unix() - moment(start).unix(); moment.duration(diff).format('hh:mm:ss') 

En outre, s'il existe d'autres bibliothèques qui peuvent facilement s'adapter à ce type de fonctionnalité, je serais intéressé par les recommandations.

Merci!

Nous cherchons à ajouter une sorte de formatage aux durées dans moment.js. Voir https://github.com/timrwood/moment/issues/463

Quelques autres bibliothèques qui pourraient aider sont http://countdownjs.org/ et https://github.com/icambron/twix.js

 var ms = 12345; alert(moment.utc(ms).format("HH:mm:ss.SSS")); 

Jetez un oeil à la JSFiddle

Utilisez ce format de durée du plugin.

Exemple:

 moment.duration(123, "minutes").format("h:mm"); 

Convertir la durée en ms et ensuite au moment:

 moment.utc(duration.as('milliseconds')).format('HH:mm:ss') 
 var diff = moment(end).unix() - moment(start).unix(); moment.utc(moment.duration(diff).asMilliseconds()).format("HH:mm:ss.SSS"); 

J'utilise:

 var duration = moment.duration("09:30"); var str = moment(duration._data).format("HH:mm"); 

Et je reçois "09:30" dans var str.

Si vous souhaitez utiliser une bibliothèque javascript différente, numeral.js peut formater secondes comme suit (l'exemple est de 1000 secondes):

 var string = numeral(1000).format('00:00'); // '00:16:40' 

Si diff est un moment

 var diff = moment(20111031) - moment(20111010); var formated1 = moment(diff).format("hh:mm:ss"); console.log("format 1: "+formated1); 

J'utilise la fonction de format classique dans ces cas:

 var diff = moment(end).unix() - moment(start).unix(); //use unix function instead of difference moment.unix(diff).format('hh:mm:ss') 

Il s'agit d'un hack parce que le temps diff est traité comme une date de moment standard, une date de début de l'heure, mais cela n'a pas d'importance pour notre objectif et vous n'avez pas besoin de plugin

Pour formater la durée du moment à la chaîne

 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"); } 

Vous n'avez pas besoin de .format. Utilisez des durées comme ceci:

 const duration = moment.duration(83, 'seconds'); console.log(duration.minutes() + ':' +duration.seconds()); // output: 1:23 

J'ai trouvé cette solution ici: https://github.com/moment/moment/issues/463

Si vous utilisez angulaire, ajoutez ceci à vos filtres:

 .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 ': '') } }) 

Exemple d'utilisation

 <div> {{diff | durationFormat}} </div> 

Que pensez-vous du javascript natif?

 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; }