我的计算如何使用这种格式?

时间:2012-01-07 18:04:44

标签: jquery dom

我在顶部有一个文本框,显示总持续时间。现在发生的事情是用户从时间戳中选择一个持续时间,这将显示在文本框中,然后将其添加到新行中。 现在我的情况是文本框的格式就像这样的“00小时00分00秒”。

因此,例如,如果总持续时间为00小时30分钟00秒,并且如果您从时间卡(显示在文本框中)中选择00小时20分钟00秒,然后将其添加到新行,则00小时30分钟00秒应减去00小时20分钟00秒制作00小时10分钟00秒。

问题是我知道如何进行计算,但我不知道如何在00小时00分00秒格式中匹配它。我的计算适用于普通数字格式,但我怎样才能使用这种格式?

    Below is my jquery code which does the calculation:

var duration = '<?php echo $_POST['durationChosen']; ?>'

        $("#qandatbl td.duration input").live("change", function(){
            calculateDuration();
        });

        function calculateDuration()
        {
           var totalduration = duration;  
    //duration is the variable which displays total duration e.g 00 Hrs 30 Mins 00 Secs
           $("#qandatbl td.duration input").each(function (i, elm){
                totalduration = totalduration - parseInt($(elm).val(), 10);
            });

            $("#total-duration").text(totalduration);
        }

下面是html代码:

    <table id="questionDuration">
    <tr>
         <th colspan="2">
         Question Duration
         </th>
    </tr>
    <tr>
    <td><input type="text" id="questiondurationpicker" name="questionDuration" readonly="readonly" /></td>
    // timepicker textbox for duration
    </tr>
    <tr>
    <td>Total Duration Remaining: <span id="total-duration"></span></td>
    this is where the total duration is displayed
    </tr>
    </table>


    <table id="qandatbl" border="1">
    <tr>
        <th class="duration">Question Duration</th>
    </tr>
    </table>

    // above is where the duration selected is stored in a new row

2 个答案:

答案 0 :(得分:1)


编辑:


看看这个小提琴。

http://jsfiddle.net/pixelass/URLR5/15/

http://jsfiddle.net/pixelass/URLR5/16/(更快的版本)

http://jsfiddle.net/pixelass/URLR5/17/(强制两位数,例如9 = 09)

HTML

current Time: <span id="currentTime">25 Hrs 24 Mins 45 Secs</span>
<hr>
subtract Time: <span id="minusThis">07 Hrs 15 Mins 21 Secs</span>
<hr>
new Time: <span id="newTime"></span>
<hr>

<button>subtract the time</button>

的jQuery

var minusThis = $('#minusThis').text(),
    date = minusThis.match(/(\d\d)/ig),
    currentTime = $('#currentTime').text(),
    newDate = currentTime.match(/(\d\d)/ig),
    newsetH = parseInt(date[0], 10),
    newsetM = parseInt(date[1], 10),
    newsetS = parseInt(date[2], 10),
    hours = parseInt(newDate[0], 10),
    mins = parseInt(newDate[1], 10),
    secs = parseInt(newDate[2], 10);


function calculate() {
    newH = hours - newsetH;
    newM = mins - newsetM;
    newS = secs - newsetS;
    $('#newTime').text(newH + ' Hrs ' + newM + ' Mins ' + newS + ' Secs');
}

$('button').on('click', calculate);

答案 1 :(得分:0)

说文本框的格式为“00小时00分00秒”你的意思是文本输入的值为“00小时10分00秒”?

如果是这样,你只需要从字符串中获取这些数字。您可以通过简单的正则表达式实现此目的。例如:

var value = "10 Hrs 20 Mins 00 Secs";
var date = value.match(/(\d\d)/ig); // now date is an array. In this case ["10", "20", "00"]

希望它有所帮助。

BTW。附加change事件可以通过以下方式重写:

$("#qandatbl td.duration input").live("change", calculateDuration);

没有创建更清洁和不必要的功能。