2016-10-03 2 views
0

データテーブルの列の総時間と分を合計しようとしています。コールバック関数は、列の時間と分を合計します。

私はDT細胞におけるこの時間フォーマットしました:4時間の12メートル

を次にようなもの:

4時間12メートル 2時間8メートル 4時間0メートル

は合計でなければなりません:

10H 20m

私は次のようなものを試してみます:

'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"関数について助けが必要です。

答えて

0
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; 
+0

は、私は、このスクリプトを持つ唯一の問題をしました、ありがとうございます。 –

+0

例:私は(1h、2h、0h)と(00m、00m、30m)を持っていて、私は結果として3h 3m ....時間は大丈夫です。 –

+0

nvmそれは動作します!どうも。 –

関連する問題