[英]Callback function sum a hours and minutes of a column
我正在尝试汇总数据表中某列的总时数和分钟数。
我在DT单元格中使用了以下时间格式:4h 12m
然后是这样的:
4h 12m 2h 8m 4h 0m
总数必须为:
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”功能的帮助。
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.