Comment puis-je formater durées de temps en utilisant exactement Moment.js?

Je voudrais faire ce qui suit, donné deux dates au format UTC mise en forme:

var start = "2014-01-13T06:00:00.0000000Z";
var end = "2014-01-13T14:16:04.0000000Z";

Je voudrais obtenir le heure exacte span qui passe entre ces deux moments, comme

8h 16m

J'ai essayé d'utiliser les éléments suivants:

var duration = moment(moment(end) - moment(start)).format('hh[h] mm[m]');

Mais cela ne fonctionne pas avec jours. En outre, il ne fonctionne pas avec les jours, car ils sont toujours >=1 même si <à 24 heures.

J'ai aussi essayé de twix.js pour obtenir la longueur, mais sa mise en forme ne prend pas en charge la création du format spécifié ci-dessus, ou je ne pouvais pas trouver la façon de le faire dans sa documentation. Fondamentalement, je suis à la recherche d'un exacte version de twix.humanizeLength().

Moment.js's a.diff(b) fournit uniquement le total des durées, il peut me donner la longueur de l'intervalle de temps en minutes, heures ou jours, mais n'a pas été calculé en utilisant les restes.

Mon solution actuelle est d'utiliser diff pour créer les gammes et ensuite utiliser le modulo pour calculer les restes, mais ce n'est pas très élégant:

var days = moment(end).diff(start, 'days');
var hours = moment(end).diff(start, 'hours') % 24;
var minutes = moment(end).diff(start, 'minutes') % 60;

var duration = ((days > 0) ? days + 'd ' : '') + ((hours > 0) ? hours + 'h ' : '') + ((minutes > 0) ? minutes + 'm ' : ''); 

La question: Est-il une façon plus intelligente de le faire dans les deux moment.js ou twix.js, ou dois-je prendre mon temps et de développer mon propre moment.js plugin?

OriginalL'auteur ane | 2014-02-10