2017-02-06 2 views
0

Мне нужно вычислить время в DataTable сноски, но все у меня есть thisКак вычислить время с помощью DataTable сноски

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

Как вы можете видеть в демо, я получаю сумму всех строк Стол, затраченный на часы, мне нужно вычислить его на время. Когда десятичное место стало> = 60, тогда оно должно +1 целое число. Скажем, результат 23.82, это должно быть 24.22. Прямо сейчас только +1 всего числа, когда десятичное число достигает сотни.

Есть ли более простой способ сделать это?

Спасибо!

ответ

2

Вы можете преобразовать его в минуты уменьшить функция

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

Вот обновленная скрипка http://jsfiddle.net/redelramosredel/kdjv8o3q/7/ она, кажется, не очень хорошо вычисляет, она имеет 0,37 вместо .22. Почему это, я что-то пропустил? – OneLazy

+0

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

0

я сделал что-то похожее на некоторое время назад:

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

Он использует MomentJS и другой плагин, чтобы правильно отображать общую длительность, есть демо here.

+0

Спасибо. но мне не нужно преобразовать время в HH: mm sir, мне нужно вычислить его и все равно вернуться в десятичном значении – OneLazy

Смежные вопросы