如何增加和减去总持续时间

时间:2012-01-05 10:26:52

标签: php jquery

我有一个php $ _POST变量,它显示上一页的总持续时间。变量如下:

<?php  $postduration  = $_POST['durationChosen']; ?>

总持续时间的格式如下"00 Hrs 00 Mins 00 Secs"

我所拥有的是一个文本框,并与该文本框链接是一个时间戳,用户可以在其中选择每个问题的持续时间。同样是时间戳中显示的持续时间的格式 是“00小时00分秒”。

用户将从时间戳中选择一个持续时间,它将显示在文本框中(这发生在顶部)。然后,用户可以单击“添加”按钮,这样做是什么 它会在文本框的新行中添加持续时间。如果用户愿意,用户可以在添加的行内更改持续时间。

现在需要做的总时间是根据添加的行中显示的内容自动减去或添加。

我将在下面举例说明我的意思:

Total Duration when page first opened: 00 Hrs 30 Mins 00 Secs


Total Duration Now: 00 Hrs 05 Mins 00 Secs


Row 1:  00 Hrs 10 mins 00 Secs
Row 2:  00 Hrs 10 mins 00 Secs
Row 3:  00 Hrs 05 mins 00 Secs

如果你看上面的例子,那就是当页面首次打开时,总持续时间为00小时30分00秒。但是我添加了3行,其中包含了他们的行 持续时间。总共3排25分钟。因此总持续时间现在显示00小时05分钟00秒。这是因为30分钟减去25分钟等于剩余5分钟。

所以有人知道这可以实现(P.S我希望总持续时间显示这种格式,如果总持续时间超过“ - 00小时00分00秒”(减去这种格式))

下面显示了使用timepicker的主文本框的代码,然后将其添加到新行中(我希望根据此文本框中的选择添加或减去总持续时间):

<table id="questionDuration">
<tr>
     <th colspan="2">
     Question Duration
     </th>
</tr>
<tr>
<td><input type="text" id="questiondurationpicker" name="questionDuration" readonly="readonly" /></td>
</tr>
<tr>
<td>Total Duration Remaining: <strong><?php echo $postduration; ?></strong></td>
</tr>
</table>

Jquery的:

$(function() {  
    $('#questiondurationpicker').trenttimepicker({
            timeFormat:'hh mm ss',
            hourGrid: 4,
            minuteGrid: 10,
            secondGrid: 10,
            showOn: 'button',
            buttonImage: "Images/clock.gif",
            buttonImageOnly: true
            });

            });

下面是显示已添加的每行的带有时间戳的文本框的代码(我想要根据每行的这些文本框中显示的内容来增加或减去总持续时间)

Jquery的:

function insertQuestion(form) {  

var $tr = $("<tr></tr>");
var $duration = $("<td class='duration'></td>")

     $('#questiondurationpicker').each( function() {

     var $this = $(this);
     var $durationText = $("<input type='text' class='questiondurationpickerRow' readonly='readonly' />").attr('name',$this.attr('name'))
                     .attr('value',$this.val())

    $duration.append($durationText);

    });

    $tr.append($duration);
    $('#qandatbl').append($tr);

$('.questiondurationpickerRow').trenttimepicker({
            timeFormat:'hh mm ss',
            hourGrid: 4,
            minuteGrid: 10,
            secondGrid: 10,
            showOn: 'button',
            buttonImage: "Images/clock.gif",
            buttonImageOnly: true
            });

}

谢谢你,希望这是有道理的。如果没有,那么请告诉我,我会尽力澄清它。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了问题,您只需要为通过开头提到的“添加”按钮创建的其他文本框添加名称。可能创建数组是最好的,例如:name="additionalDuration[]"

然后在您的PHP文件中,您将有两个$ _POST变量:基本持续时间和一系列额外持续时间。此时,您只需解析所有持续时间并添加或减去它们以计算总持续时间,然后按照您希望的方式对其进行格式化。

如果您需要有关解析提交时间和计算的帮助,请随时在此答案中发表评论。

更新,提交解析的示例:

// example function to convert submitted date into seconds
function time_to_seconds($str) {
    if (preg_match("#^(\d+)\D+(\d+)\D+(\d+)$#", trim($str), $match))
        return $match[3] + 60 * $match[2] + 3600 * $match[1];
    return 0;
}
// taking base time as a starting amount
$total_duration = time_to_seconds($_POST['baseDuration']);

// for each additional user input calculating the total duration
foreach ($_POST['additionalDuration'] as $add)
    $total_duration -= time_to_seconds($add);

// formatting the output
echo date("H \H\r\s i \m\i\n\s s \S\e\c\s", $total_duration);

正如我在帖子中看到的那样,所有其他数据都是从基准持续时间中减去的。这就是我为每个人使用-=的原因。如我错了请纠正我。 再次,如果出现问题,请随时提出进一步的问题。