Функция обратного вызова суммирует часы и минуты столбца

#javascript #jquery #datatable #callback #datatables

#javascript #jquery #datatable #обратный вызов #таблицы данных

Вопрос:

Я пытаюсь суммировать общее количество часов и минут столбца таблицы данных.

У меня этот формат времени в ячейках DT: 4 часа 12 минут

Затем что-то вроде:

4 часа 12 минут 2 часа 8 минут 4 часа 0 минут

Общее количество должно быть:

10 часов 20 минут

Я пытаюсь сделать что-то вроде:

 'footerCallback': function ( row, data, start, end, display ) {
                                var api = this.api(), data;

                                //Remove the formatting to get integer data for summation
                                var numVal = function ( i ) {
                                    return typeof i === 'string' ?
                                            parseFloat(i.split("€")[1].split("<")[0].replace(/,/, '.')) :
                                            typeof i === 'number' ?
                                                    i : 0;
                                };
                                var perTemp = function ( i ) {
                                    // I need some help here...
                                }

                                // Total over all pages
                                totalvar = api
                                        .column( 3 )
                                        .data()
                                        .reduce( function (a, b) {
                                            return numVal(a)   numVal(b);
                                        }, 0 );
                                totaltemp= api
                                        .column( 4 )
                                        .data()
                                        .reduce( function (a, b) {
                                            return perTemp(a)   perTemp(b);
                                        }, 0 );

                                // Update footer
                                $( api.column( 3 ).footer() ).html('€ '   totalvar);
                                $( api.column( 4 ).footer() ).html(totaltemp[0]   "h"   totaltemp[1]   "m");
  

Мне нужна некоторая помощь с функцией «perTemp».

Ответ №1:

 var a = ["4h 12m 2h 8m 4h 0m", "4h 12m"];
var s = a.join(","); // "4h 12m 2h 8m 4h 0m,4h 12m"
var re = /([d]*?(h|m))/gmi;

var res = s.match(re); // Array [ "4h", "12m", "2h", "8m", "4h", "0m", "4h", "12m" ]

var hours = res.filter(function(value){
   if(value.indexOf("h") > -1){
     return true;
   }
}).map(function(value){
   return parseInt(value.substr(0, value.length-1))
}).reduce(function(pre, cur){
  return pre   cur
}); // Array [ "4h", "2h", "4h", "4h" ] -> Array [ 4, 2, 4, 4 ] -> 14

 var min = res.filter(function(value){
   if(value.indexOf("m") > -1){
     return true;
   }
}).map(function(value){
   return parseInt(value.substr(0, value.length-1))
}).reduce(function(pre, cur){
  return pre   cur
}); // 32

// add hour if > 60 min
hour  = Math.floor(min/60);
min = min % 60;
  

Комментарии:

1. Спасибо, у меня только одна проблема с этим скриптом.

2. Пример: у меня есть (1ч, 2ч, 0ч) и (00м, 00м, 30м), и в результате я получаю: 3ч 3м …. часов в порядке, минут нет.