2017-10-05 8 views
0

私は開始日時、終了日、終了日時を持っており、合計旅行時間も調べています。出力はミリ秒単位であり、これを時間形式に変換する必要があります。ここで他の答えを検索することで、私は次のような試みをしましたが結果はありませんミリ秒から時間の書式への変換

<md-cell *mdCellDef="let row"> {{row?.duration | formatDuration}} </md-cell> 

とTSファイル:

export class StoppageComponent implements OnInit { 

    constructor() { 
    } 

    ngOnInit() { 
    } 


     filter('formatDuration', function() { 
     return function (input) { 
      var totalHours, totalMinutes, totalSeconds, hours, minutes, seconds, result=''; 

      totalSeconds = input/1000; 
      totalMinutes = totalSeconds/60; 
      totalHours = totalMinutes/60; 

      seconds = Math.floor(totalSeconds) % 60; 
      minutes = Math.floor(totalMinutes) % 60; 
      hours = Math.floor(totalHours) % 60; 

      if (hours !== 0) { 
       result += hours+':'; 

       if (minutes.toString().length == 1) { 
        minutes = '0'+minutes; 
       } 
      } 

      result += minutes+':'; 

      if (seconds.toString().length == 1) { 
       seconds = '0'+seconds; 
      } 

      result += seconds; 

      return result; 
     }; 
     }); 
    } 

私は、角に新しいですとエラーが、TSファイルであると思います。

関数を使用せずにパイプを使用して直接変換することはありますか?

答えて

0

他の回答を使用することができ、最終的解決策を見つけた、複雑に見えます自分.. ..

<md-cell *mdCellDef="let row"> {{getFormathours(row?.duration)}} </md-cell> 

とTS、などHTML、

getFormathours(input) { 
    var totalHours, totalMinutes, totalSeconds, hours, minutes, seconds, result=''; 
    totalSeconds = input/1000; 
    totalMinutes = totalSeconds/60; 
    totalHours = totalMinutes/60; 

    seconds = Math.floor(totalSeconds) % 60; 
    minutes = Math.floor(totalMinutes) % 60; 
    hours = Math.floor(totalHours) % 60; 

    console.log (hours + ' : ' + minutes + ' : ' + seconds); 
    if (hours !== 0) { 
     result += hours+' hr:'; 

     if (minutes.toString().length == 1) { 
      minutes = '0'+minutes; 
     } 
    } 

    result += minutes+' min'; 

     if (seconds.toString().length == 1) { 
      seconds = '0'+seconds; 
     } 

     result += seconds; 

    return result; 
} 

これは私が必要な正確な出力と、私の質問に基づいてはるかに明確なソリューションを提供します。..とにかく私はあなたの努力のためにあまりにも他の人の答えを感謝しています。

0

ホイールを改造する必要はありません。 Dateオブジェクトを使用して継続時間を取得できます。

あなたは2つの日付オブジェクトを持っていると仮定すると、

  • は、それらの間の違いを取得します。あなたは既にミル秒を持っているので、あなたはすでにこのステップを完了しています。
  • 新しい日付オブジェクトを作成し、時間値を削除します。
  • 新しい時刻値(差異)を設定すると、すべての値が得られます。関数を使って値を取得し、あなたのフォーマットで表示するだけです。私にとって

function getTravelDuration(date1, date2) { 
 
    var diff = +date2 - +date1; 
 
    var today = new Date(); 
 
    today.setHours(0,0,0,0); 
 
    var arrival = new Date(+today + diff); 
 
    var duration = ['getFullYear', 'getMonth', 'getDate', 'getHours', 'getMinutes', 'getSeconds'].reduce(function(p,c,i,a){ 
 
    var value = arrival[c]() - today[c](); 
 
    if(value) { 
 
     p += value; 
 
     p += ((c === 'getFullYear') ? ' Year' : c.replace('get', ' ')) + ' ' 
 
    } 
 
    return p; 
 
    }, ''); 
 
    console.log(duration); 
 
} 
 

 
function doubleDigits(str){ 
 
    return ('00' + str).slice(-2) 
 
} 
 

 
getTravelDuration(new Date(2017, 10, 5, 5), new Date(2017, 10, 5, 15, 23)); 
 
getTravelDuration(new Date(2017, 10, 5, 5), new Date(2017, 10, 6, 15, 23, 30));

0

、(エラーなし)最良の選択は、日付の代わりに、瞬間ライブラリを使用しています。 人気があり、テストのライブラリを使用してhttps://momentjs.com/docs/

var t1 = moment('2017/10/5 15:23'); 
var t2 = moment('2017/10/5 15:23'); 

var differenceMinutes = t1.diff(t2, 'minutes'); 
var differenceMilliseconds = t1.diff(t2, 'minutes'); 

を確認してください、より良いかもしれません。あなたは、角度テンプレートで使用することができます。

https://github.com/urish/angular2-moment

例:

{{startDate | amDifference: endDate :'' }} 
0

あなたはこのコードを直接

export class StoppageComponent implements OnInit { 

constructor() { 
} 

ngOnInit() { 
} 


filter('formatDuration', function() { 
    return function (input) { 
     var result = new Date(input); 
var n = (d.getDate().toString()) +'/'+ (d.getMonth().toString())+'/' +(d.getFullYear().toString()) + ' '+ (d.getHours().toString()) +':'+ (d.getHours().toString()) +':'+ (d.getSeconds().toString()); 

     return result; 
    }; 
    }); 
} 
関連する問題