我有这张桌子:
<table id="total" border="1" width="100%">
<tbody>
<tr>
<td>Total duration time</td>
<td class="total_duration_time"></td>
</tr>
</tbody>
</table>
<table id="data" border="1" width="100%">
<tbody>
<tr>
<td>Anna</td>
<td>318</td><td class="duration_time">00:00:50</td>
<td>62700</td>
</tr>
<tr>
<td>Bob</td>
<td>318</td>
<td class="duration_time">00:00:27</td>
<td>62703</td>
</tr>
<tr>
<td>Mike</td>
<td>318</td>
<td class="duration_time">00:00:36</td>
<td>88455233284</td>
</tr>
</tbody>
</table>
我需要使用类duration_time
计算列的总和,并将结果打印到类total_duration_time
的列中。
如何在JavaScript或jQuery上执行此操作?
我尝试使用此示例http://jsfiddle.net/unKDk/13/中的代码,但如果使用替换数字00:00:00的值而不是数字,则不会计算时间量。
答案 0 :(得分:4)
最简单的方法是使用秒。我的意思是,你可以将每个持续时间转换为秒,使总数然后显示你需要的地方使用另一个将秒转换为hh-mm-ss格式的函数。
您可以查看它的外观和效果here
注意:函数toHHMMSS()
是令牌表单here
答案 1 :(得分:2)
这是一个带进位的完整示例(假设格式为HOURS:MINUTES:SECONDS),可能不是计算的最佳解决方案:
HTML
<table id="sum_table" width="300" border="1">
<tr class="titlerow">
<td>Apple</td>
<td>Orange</td>
<td>Watermelon</td>
</tr>
<tr>
<td class="rowDataSd">00:55:23</td>
<td class="rowDataSd">00:55:23</td>
<td class="rowDataSd">00:55:23</td>
</tr>
<tr>
<td class="rowDataSd">00:55:23</td>
<td class="rowDataSd">00:55:23</td>
<td class="rowDataSd">00:55:23</td>
</tr>
<tr>
<td class="rowDataSd">00:55:23</td>
<td class="rowDataSd">00:55:23</td>
<td class="rowDataSd">00:55:22</td>
</tr>
<tr class="totalColumn">
<td class="totalCol">Total:</td>
<td class="totalCol">Total:</td>
<td class="totalCol">Total:</td>
</tr>
</table>
JS
var totals = [[0,0,0], [0,0,0], [0,0,0]];
$(document).ready(function () {
var $dataRows = $("#sum_table tr:not('.totalColumn, .titlerow')");
$dataRows.each(function () {
$(this).find('.rowDataSd').each(function (i) {
time = $(this).html().split(":")
totals[i][2] += parseInt(time[2]);
if(totals[i][2] > 60)
{
totals[i][2] %= 60;
totals[i][1] += parseInt(time[1]) + 1;
}
else
totals[i][1] += parseInt(time[1]);
if(totals[i][1] > 60)
{
totals[i][1] %= 60;
totals[i][0] += parseInt(time[0]) + 1;
}
else
totals[i][0] += parseInt(time[0]);
});
});
$("#sum_table td.totalCol").each(function (i) {
console.log(totals[i]);
$(this).html("total:" + totals[i][0] + ":" + totals[i][1] + ":" + totals[i][2]);
});
});
答案 2 :(得分:1)
您可以使用24小时格式时间输入计算总时间
var a = "22:00"
var b = "01:00"
小提琴演示:
答案 3 :(得分:0)
你需要做这样的事情,我没有对它进行过广泛的测试,所以可能存在问题,但你应该明白这一点。
的Javascript
var totalDurationTime = document.getElementsByClassName("total_duration_time")[0],
durationTimes = document.getElementsByClassName("duration_time"),
total = {
hours: 0,
minutes: 0,
seconds: 0
};
function zeroPad (num) {
var str = num.toString();
if (str.length < 2) {
str = "0" + str;
}
return str;
}
Array.prototype.forEach.call(durationTimes, function (time) {
var parts = time.textContent.split(":"),
temp;
temp = (+parts[2] + total.seconds);
total.seconds = temp % 60;
temp = (+parts[1] + total.minutes) + (temp - total.seconds) / 60;
total.minutes = temp % 60;
total.hours = (+parts[0] + total.hours) + (temp - total.minutes) / 60;
});
totalDurationTime.textContent = zeroPad(total.hours) + ":" + zeroPad(total.minutes) + ":" + zeroPad(total.seconds);
上