2017-10-05 29 views
0

Ich habe ein Startdatum, Uhrzeit und Enddatum, Uhrzeit und auch die Gesamtdauer der Reise. Die Ausgabe ist in Millisekunden und ich muss dies in Stundenformat umwandeln. Bei der Suche nach anderen Antworten habe ich folgendes versucht, aber kein Ergebnis.Umwandlung von Millisekunden in Stundenformat

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

und TS-Datei:

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

Ich denke, der Fehler mit TS-Datei ist, wie ich in dem Winkel neu bin.

Gibt es eine direkte Konvertierung mit Rohr ohne Funktionen zu verwenden?

Antwort

0

Andere Antworten kompliziert aussieht, endlich eine Lösung gefunden heraus verwenden können ich ..

Html wie

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

Und ts,

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

Dies gibt die genaue Ausgabe, die ich brauchte, und viel mehr Lösung klar auf Grund meiner Frage .. Wie auch immer schätze ich andere Antworten zu für Ihre Mühe.

0

Sie müssen das Rad nicht neu erfinden. Sie können Date-Objekte verwenden, um die Dauer zu erhalten.

Angenommen, Sie 2 Datumsobjekte haben,

  • den Unterschied zwischen ihnen. Da Sie bereits Millisekunden haben, haben Sie diesen Schritt bereits abgeschlossen.
  • Erstellen Sie jetzt ein neues Datumsobjekt und entfernen Sie den Zeitwert.
  • Wenn Sie nun einen neuen Zeitwert (Differenz) eingeben, haben Sie alle Werte. Benutze einfach die Funktion und erhalte die Werte und zeige sie in deinem Format an.

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

Für mich die beste Wahl (ohne Fehler) ist der Moment-Bibliothek verwenden, statt Datum. Bitte überprüfen 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'); 

mit populären und getestet Bibliotheken, könnte besser sein. Sie können in Winkel Vorlagen verwenden:

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

Beispiel:

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

Sie diesen Code direkt

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