[英]Datatables footer sum()
我正在嘗試對hh:mm:ss類型的數據進行正確的sum()處理,並且我試圖理解為什么當分鍾或秒數變得> = 100時為什么會有這種行為。我該如何解決呢? ?
這是我從Datatables論壇獲取的sum()函數:
jQuery.fn.dataTable.Api.register('sum()', function () {
return this.flatten().reduce(function (a, b) {
if (typeof a === 'string') {
a = a.replace(/[^\d.-]/g, '') * 1;
}
if (typeof b === 'string') {
b = b.replace(/[^\d.-]/g, '') * 1;
}
return a + b;
}, 0);
});
這是剩下的所有充滿轉換的代碼,這讓我很頭疼。
var tempoPage = tempo.column(3, { page: 'current' })
.data()
.sum();
tempoPage = tempoPage.toString();
while (tempoPage.length < 6) {
tempoPage = "0" + tempoPage
}
tempoPage = tempoPage.replace(/^(\d+)(\d{2})(\d{2})$/, function (m, m1, m2, m3) {
m1 = Number(m1);
m2 = Number(m2);
m2 += parseInt(m3 / 60, 10);
m3 = m3 % 60; // get soconds
m1 += parseInt(m2 / 60, 10); //get hours
m2 = m2 % 60; // get minutes
//convert back to string
m2 = m2.toString();
m3 = m3.toString();
m1 = m1.toString();
while (m1.length < 2){
m1 = '0' + m1
}
while (m2.length < 2){
m2 = '0' + m2
}
while (m3.length < 2){
m3 = '0' + m3
}
return m1 + ':' + m2.slice(-2) + ':' + m3.slice(-2);
})
//write in footer
$(tempo.column(3)
.footer()).html(tempoPage);
},
有沒有人看到一種更好的方法來做到這一點,或者可以指出我的正確方向? 謝謝。
我不能說代碼有什么問題。 看起來確實很復雜,我們唯一需要做的就是對3個值求和,例如在秒數增加60時加1分鍾。使這個不太復雜的sumHours()
插件看起來很有效(但尚未測試)深度):
jQuery.fn.dataTable.Api.register( 'sumHours()', function ( ) {
function pad(int) {
return int > 9 ? int.toString() : '0' + int.toString()
}
var t, hours = 0, mins = 0, secs = 0;
for (var i=0; i<this.length; i++) {
t = this[i].split(':')
hours += parseInt(t[0])
mins += parseInt(t[1])
if (mins >= 60) {
mins -= 60
hours += 1
}
secs += parseInt(t[2])
if (secs >= 60) {
secs -= 60
mins += 1
}
}
return pad(hours) + ':' + pad(mins) + ':' + pad(secs)
})
您可以使用與鏈接到官方sum()
示例相同的方式使用此方法:
api.column( 0, {page:'current'} ).data().sumHours()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.