Jquery合计时间不正确

jquery totaling time improperly

本文关键字:不正确 时间 Jquery      更新时间:2023-09-26

我的网站上有以下HTML表格

<div class="timecard">
<table>
<tr class = "display-even-row">
    <td align="left" style="color:#000099">In</td>
    <td align="left" class="job_code">2400-Duffy's</td>
    <td align="left" class="hrs">00:04</td>
</tr>
<tr class = "display-odd-row">
    <td align="left" style="color:#009900">In</td>
    <td align="left" class="job_code">1500-Orchard</td>
    <td align="left" class="hrs">01:00</td>
</tr>
<tr class = "display-even-row">
    <td align="left" style="color:#000099">In</td>
    <td align="left" class="job_code">32-Black</td>
    <td align="left" class="hrs">10:00</td>
</tr>
<tr class = "display-odd-row">
    <td align="left" style="color:#009900">In</td>
    <td align="left" class="job_code">1500-Orchard</td>
    <td align="left" class="hrs">4</td>
</tr>
</table>
</div>
<div id="total">
</div>

我有下面的jquery脚本来计算每个单独的工作代码的总小时数。它是动态设计的,允许以后添加更多的作业代码。但是,它不能正确地计算小时数,也不能显示工作是否有分钟数。

$(document).ready(function(){
var timeString = $(this).next('td.hrs').text();
var components = timeString.split(':');
var seconds = components[1] ? parseInt(components[1], 10) : 0;
var hrs = parseInt(components[0], 10) + seconds / 60;
total += hrs;
var temp = [];
$('.job_code').each(function(index, element){
    var text = $(this).text();
    temp.push(text);
});
// remove duplicates
var job_code = [];
$.each(temp, function(index, element){
    if($.inArray(element, job_code) === -1) job_code.push(element);
});
var sum = {};
$.each(job_code, function(index, element){
    var total = 0;
    $('.job_code:contains('+element+')').each(function(key, value){
        total += parseInt($(this).next('td.hrs').text());
        sum[index] = {'job_code' : element, 'total': total};
    });
});
console.log(sum);
$.each(sum, function(index, element){
    $('#total').append('<p>Total for '+element.job_code+': '+element.total+'</p>');
});
});

有什么想法需要做些什么改变,使这个工作与00:00而不是只是整个整数?

由于没有使用日期/时间解析库,您可能希望在尝试解析冒号之前提取冒号两侧的整数字符串。

var timeString = $(this).next('td.hrs').text();
var components = timeString.split(':');
var seconds = components[1] ? parseInt(components[1], 10) : 0;
var hrs = parseInt(components[0], 10) + seconds / 60;
total += hrs;

您也可以使用正则表达式来完成此操作,但是拆分应该可以正常工作。