[Angular Material] 時間運算及格式顯示及mat-sort-header排序處理

如題

因為後端是給兩個類似這種的數字 127756416859912816
我必須要把數字相減,然後轉成幾分幾秒的格式顯示在表格上
而且相減後時間可能會超過60分鐘,所以要視狀況顯示到小時,未滿1小時則顯示到小時

原本想說就

row = API的res

getDataDiff(
                new Date(row.ATime),
                new Date(row.BTime),
              );

function getDataDiff(startDate: Date, endDate: Date) {
      const endTime = endDate.getTime();
      const startTime = startDate.getTime();

      if (0 > startTime || 0 > endTime) {
        return `無`;
      }

      var timeDiff = Math.abs(endDate.getTime() - startDate.getTime());
      var minutes = Math.floor(timeDiff / 60);
      var seconds = Math.floor(timeDiff) - minutes * 60;
      return `${minutes}分${seconds}秒`;
    }

但是這樣寫法
再顯示到畫面上,排序有問題,資料正確性可能也有問題

以及中間嘗試的寫法
1.
相減後的時間,不是單純的時間"相差值",而是變成描述時間幾月幾號的那種時間
=>於是顯示失敗,排序也有問題

查了datePipe
https://angular.io/api/common/DatePipe
嘗試

  <td mat-cell *matCellDef="let row">
            {{ row.ATime | date: 'mm:ss' }}
          </td>

好像也不對

moment js

    var a = moment(startTime);
      var b = moment(endTime);
      var diff_s = moment.duration(a.diff(b));

結果回傳 PT1.364S 這種東西


所以想問該怎樣寫,
為什麼都是吃成日期而不是單純的時間相差值

或是放棄,直接使用 moment.js來寫的話
寫法是如何處理的?

感謝 :pleading_face:

是 Timespan 嗎? 排序要用原始資料來排序吧
至於顯示,自己寫一個 pipe 來處理,不一定要用 moment,還是得回到資料的性質是什麼跟你想要怎麼呈現