2017-04-07 101 views
2

我正在使用momentjs使用一個小腳本,它顯示了我有多少小時和分鐘(分開),直到特定小時。但由於某種原因,結果是錯誤的。moment.js差異顯示錯誤的結果

那是到目前爲止我的代碼:

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

和多數民衆的輸出:

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

A - B的差異應該是8,但其顯示17

+0

'TimeA.diff(TIMEB)'返回的毫秒數。 'moment(Number)'將參數解釋爲自Unix紀元以來的毫秒數。所以你可能會看到解釋到你當地的時區。 –

+0

有時可能會令人困惑。您沒有正確使用diff(),並且如前所述,沒有參數就會返回Unix時間戳。請在這裏查看 - > [時刻文檔](https://momentjs.com/docs/#/displaying/difference/) – twg

回答

0

按momentjs文檔

如果此刻比要傳遞到moment.fn.diff時刻較早,返回值將是負面的。

翻譯成你的例子:

如果TimeA早於TIMEB傳遞給moment.diff則該值將是負

,並因爲它是返回毫秒-28800000是一條指令,如:從午夜開始採取該量的毫秒數,即給你不同的時間

所以你應該做的是

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

DIFF文檔從文檔

一個簡單的方法想到這https://momentjs.com/docs/#/displaying/difference/

實施例是通過替換爲.diff(具有負操作。

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

輸出現在是「差異AB:09:00:00」,但它應該是' 08:00:00'。 – Nerdkowski

+0

你在什麼時區,是本地化日期之一嗎? – maurycy

+0

這個解決方案與@BogdanKuštan的解決方案結合在一起給出了正確的結果。 – Nerdkowski

-1

正如大家所說,diff回報毫秒,所以你應該把它轉換成小時(或所需的格式)。

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

試試這個

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