2017-04-07 3 views
2

Ich arbeite an einem kleinen Skript mit momentjs, das mir zeigt, wie viele Stunden und Minuten (getrennt) ich bis zu einer bestimmten Stunde habe. Aber aus irgendeinem Grund ist das Ergebnis falsch.moment.js diff zeigt falsches Ergebnis

Das ist mein Code so weit:

var TimeA = moment('08:00:00', 'HH:mm:ss'); 
var TimeB = moment('16:00:00', 'HH:mm:ss'); 

var DiffAB = moment(TimeA.diff(TimeB)).format('HH:mm:ss'); 

var DiffHours = moment(DiffAB, 'HH:mm:ss').format('H'); 
var DiffMinutes = moment(DiffAB, 'HH:mm:ss').format('mm'); 

console.log('TimeA: ' + moment(TimeA).format('HH:mm:ss')); 
console.log('TimeB: ' + moment(TimeB).format('HH:mm:ss')); 

console.log('Difference A-B: ' + DiffAB); 

console.log('Diff Hours: ' + DiffHours); 
console.log('Diff Minutes: ' + DiffMinutes); 

Und das ist der Ausgang:

TimeA: 08:00:00 
TimeB: 16:00:00 
Difference A-B: 17:00:00 
Diff Hours: 17 
Diff Minutes: 00 

Der Unterschied von A - B8 sein sollte, aber seine 17 zeigt.

+0

'TimeA.diff (timeb)' gibt die Anzahl von Millisekunden. 'moment (Number)' interpretiert das Argument als Anzahl von Millisekunden seit der Unix-Epoche. Sie sehen das wahrscheinlich in Ihrer lokalen Zeitzone. –

+0

Moment kann manchmal verwirrend sein. Sie verwenden nicht diff() korrekt und wie erwähnt, ohne Parameter gibt Unix Timestamp zurück. Bitte schaue hier -> [moment docs] (https://momentjs.com/docs/#/displaying/difference/) – twg

Antwort

0

Per momentjs Dokumentation

Wenn der Moment früher als der Moment ist, Sie zu moment.fn.diff vorbei sind, wird der Rückgabewert negativ sein.

Um es zu Ihrem Beispiel zu übersetzen:

Wenn TimeA früher als timeb moment.diff geben, dann wird der Wert

negativ sein und da sie als Millisekunden zurückgegeben -28800000 ist eine Anweisung wie: nehmen Sie diese Menge an Millisekunden von Mitternacht, die Ihnen die unterschiedliche Zeit

so was Sie tun sollten, ist

var DiffAB = moment(TimeB.diff(TimeA)).utcOffset(0).format('HH:mm:ss'); 

Diff Dokumentation https://momentjs.com/docs/#/displaying/difference/

Beispiel von doc

Eine einfache Möglichkeit, dies zu denken, ist durch den Ersatz .diff (mit einem Minus-Operator.

  // a < b 
a.diff(b) // a - b < 0 
b.diff(a) // b - a > 0 
+0

Die Ausgabe ist jetzt 'Differenz AB: 09: 00: 00' aber es sollte' sein 08: 00: 00'. – Nerdkowski

+0

In welcher Zeitzone ist das Datum lokalisiert? – maurycy

+0

Diese Lösung kombiniert mit der Lösung von @ Bogdan Kuštan gibt das richtige Ergebnis. – Nerdkowski

-1

Wie jeder sagte, diff kehren Millisekunden, so dass Sie es zu Stunden umwandeln sollten (oder gewünschtes Format).

moment.duration(TimeA.diff(TimeB), 'milliseconds').asHours(); 
-1

Versuchen Sie, diese

var TimeA = moment('08:00:00', 'HH:mm:ss'); 
var TimeB = moment('16:00:00', 'HH:mm:ss'); 
var DiffAB = moment.utc(moment(TimeB).diff(moment(TimeA))); 
console.log('Difference B-A: ' + DiffAB.format('HH:mm:ss')); 
console.log('Diff Hours: ' + DiffAB.format('H')); 
console.log('Diff Minutes: ' + DiffAB.format('s'));