2017-02-06 2 views
0

Ich brauche Zeit in Datatable-Fußzeile zu berechnen, aber alles, was ich habe, ist thisWie Rechenzeit über Datatable Fußzeile

"footerCallback": function(row, data, start, end, display) { 
    var api = this.api(), 
     data; 
    var intVal = function(i) { 
     return typeof i === 'string' ? i.replace(/[\$,]/g, '') * 1 : typeof i === 'number' ? i : 0; 
    }; 

    totalhrs = api.column(3).data().reduce(function(a, b) { 
     return intVal(a) + intVal(b); 
    }, 0); 
    totalhrs_page = api.column(3, { 
     page: 'current' 
    }).data().reduce(function(a, b) { 
     return intVal(a) + intVal(b); 
    }, 0); 
    // Update footer 
    $('#totalHours').html("<b>" + "TOTAL Hours: " + totalhrs_page + "/" + totalhrs + "</b>"); 
    } 

Wie Sie in der Demo sehen, ich bin die Summe aller Zeilen immer in Ich brauche die Zeit, die ich brauche, um sie für die Zeit zu berechnen. Wenn die Dezimalstelle> = 60 wurde, sollte sie die ganze Zahl +1 geben. Sagen wir das Ergebnis ist 23.82, es sollte 24.22 sein. Im Moment wird nur die ganze Zahl +1 addiert, wenn die Dezimalstelle hundert erreicht.

Gibt es eine einfachere Möglichkeit, dies zu tun?

Danke!

Antwort

2

Sie können es auf Minuten konvertieren in reduzieren Funktion

totalhrs = api.column(3).data().reduce(function(a, b) { 
     b = b.split("."); 
     var hours = b[0]||0; 
     var min = b[1]||0;  
     return a + intVal(hours*60)+intVal(min); 
     }, 0); 
     totalhrs = Math.floor(totalhrs/60)+"." + totalhrs % 60; 
+0

Hier ist die aktualisierte Geige http://jsfiddle.net/redelramosredel/kdjv8o3q/7/ es scheint nicht schön zu berechnen, es hat .37 statt .22. Warum ist das, vermisse ich etwas? – OneLazy

+0

totalhrs = Math.floor (totalhrs/60) + "." + totalhrs% 60; –

0

ich etwas ähnliches vor einiger Zeit tat

$.fn.dataTable.Api.register('sumDuration()', function() { 
    return this.flatten().reduce(function(a, b) { 
     console.log(a); 
     console.log(b); 
     if (typeof a === 'string') { 
      a = moment.duration(a, "HH:mm").asSeconds(); 
     } 
     if (typeof b === 'string') { 
      b = moment.duration(b, "HH:mm").asSeconds(); 
     } 
     return a + b; 
    }, 0); 
}); 

Es verwendet MomentJS und ein anderes Plugin richtig die Gesamtdauer angezeigt werden, gibt es eine Demo here.

+0

Danke. aber ich brauche nicht die Zeit Umwandlung in HH: mm Herr, ich muss es berechnen und immer noch im Dezimalwert zurückgeben – OneLazy