2014-02-10 6 views
8

Ich möchte folgende tun gegeben zwei Daten in UTC-Formatierung:Wie kann ich Zeitdauern mit Moment.js genau formatieren?

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

Ich möchte die genaue Zeitspanne, die zwischen diesen beiden Zeitpunkten, wie

8h 16m 
geht bekommen

ich habe versucht, mit dem folgenden:

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

Aber das funktioniert nicht mit Tagen. Außerdem funktioniert es nicht mit Tagen, da sie immer> = 1 sind, auch wenn < 24 Stunden vergehen.

Ich habe auch versucht twix.js, um die Länge zu erhalten, aber seine Formatierung unterstützt nicht das Erstellen des oben angegebenen Formats, oder ich konnte den Weg dazu in seiner Dokumentation nicht finden. Grundsätzlich suche ich nach einer exakten Version von twix.humanizeLength().

Moment.js ‚s a.diff(b) nur Gesamtdauern bietet, kann es mir die Länge der Zeitspanne in Minuten, Stunden oder Tagen geben, aber nicht mit Resten berechnet.

Meine aktuelle Lösung ist diff zu verwenden, um die Bereiche zu erstellen und dann Modulo verwenden Reste zu berechnen, aber das ist nicht sehr elegant:

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 ' : ''); 

Die Frage: Gibt es eine intelligentere Weise zu tun dies in entweder moment.js oder twix.js, oder soll ich mir Zeit nehmen und mein eigenes moment.js Plugin entwickeln?

Antwort

4

Es ist ein Plugin für die Formatierung von Dauer in moment.js: moment-duration-format

Wenn es nicht tun, was Sie brauchen, dann sollten Sie moment.duration.fn verlängern. Wenn Sie viele Gebietsschemas nicht unterstützen, sollte es einfach genug sein.

In jedem Fall würde ich empfehlen, den Thread dieser feature request zu lesen.

+0

Ich werde sehen, was mit der Feature-Anfrage passiert. Im Moment macht das Plugin was ich will. – ane

4

können Sie versuchen, Dauern, aber ich bin mir nicht sicher, ob diejenigen, die Fähigkeiten haben Sie suchen http://momentjs.com/docs/#/durations/

Sie können aber auch immer diff des Benutzers Moment den Unterschied in Millisekunden zu erhalten und es dann formatieren, um Ihre braucht. Es ist im Grunde das gleiche, was Sie tun, aber Sie rufen nur einmal diff.

function convertMilliSecondsIntoLegibleString(milliSecondsIn) { 

    var secsIn = milliSecondsIn/1000; 
    var milliSecs = milliSecondsIn % 1000; 

    var hours = secsIn/3600, 
    remainder = secsIn % 3600, 
    minutes = remainder/60, 
    seconds = remainder % 60; 


    return (hours + "h: " 
      + minutes + "m: " 
      + seconds +"s: " + milliSecs + "ms"); 
} 
Verwandte Themen