Javascript 如何用PHP偏移HTML表,从不同列的第二行单元格值中减去第1行的单元格值

Javascript 如何用PHP偏移HTML表,从不同列的第二行单元格值中减去第1行的单元格值,javascript,php,jquery,mysql,html,Javascript,Php,Jquery,Mysql,Html,好的,我从上周开始尝试解决这个问题,但还没有找到解决方案。我问了很多次这个问题,但都无法让代码正常工作,所以我把所有细节都放在这个问题中 我正在使用PHP和Mysql查询生成一个HTML表(表如下所示) 我想用PHP、Jquery或Javascript添加另一列,用第二行的Stateendtime列减去第一行的Statestarttime列,以找出时间差 我只想在页面上显示最小差异列 预期结果的例子 StateStarTtime StateEndTime Min Difference

好的,我从上周开始尝试解决这个问题,但还没有找到解决方案。我问了很多次这个问题,但都无法让代码正常工作,所以我把所有细节都放在这个问题中

我正在使用PHP和Mysql查询生成一个HTML表(表如下所示)

我想用PHP、Jquery或Javascript添加另一列,用第二行的
Stateendtime
列减去第一行的
Statestarttime
列,以找出时间差


我只想在页面上显示最小差异列

预期结果的例子

StateStarTtime    StateEndTime   Min Difference 

03:57             03:58          00:03
03:53             03:54          00:04
03:46             03:49          null
在第一行中,我可以找到很多关于从StateEndTime中减去StateStarTtime的示例和帮助,但我想从StateEndTime的第二行单元格值中减去StateStarTtime的第一行单元格值,以找出细微的差异

我是HTML和PHP的初学者,但对JS/JQ完全陌生,因此非常感谢您对我如何做到这一点的指导。下面是我正在使用的PHP和HTML代码片段。如果你想要完整的代码,请告诉我

从Mysql获取数据

<?php

if(isset($_POST['search']))
{
    $valueToSearch = $_POST['valueToSearch'];
    $query = "SELECT * FROM time WHERE DATE_SUB(CURDATE(),INTERVAL 7 DAY) <= Timestamp AND EmpID='".$valueToSearch."' ORDER BY `time`.`Timestamp` DESC";
    $search_result = filterTable($query);

}
 else {
    $query = "SELECT * FROM time WHERE DATE_SUB(CURDATE(),INTERVAL 1 DAY) <= Timestamp ORDER BY `time`.`Timestamp` DESC";
    $search_result = filterTable($query);
}

function filterTable($query)
{
    $connect = mysqli_connect("localhost", "root", "", "timetracker");
    $filter_Result = mysqli_query($connect, $query);
    return $filter_Result;
}

?>

尝试过的解决方案-1

<?php while($row = mysqli_fetch_array($search_result)):?>
    <?php $startTime[] =  $row['StateStarttime'];?>
    <?php $endTime[] = $row['StateEndtime'];?>
<?php endwhile;?>
<?php 
    $i = 0;
    while($row = mysqli_fetch_array($search_result)):?>
        <tr>
            <td align="Center"><?php echo $row['id'];?></td>
            <td align="Center"><?php echo $row['EmpID'];?></td>
            <td align="Center"><?php echo $row['Date'];?></td>
            <td align="Center"><?php echo $row['Username'];?></td>
            <td align="Center"><?php echo $row['Computername'];?></td>
            <td align="Center"><?php echo $row['State'];?></td>
            <td align="Center"><?php echo $row['MinutesatState'];?></td>
            <td align="Center"><?php echo $row['StateStarttime'];?></td>
            <td align="Center"><?php echo $row['StateEndtime'];?></td>
            <td align="Center"><?php echo $row['Timestamp'];?></td>
            //your calculation goes here like diff



            <td align="Center">
               <?php 
                   $mycalc = ($startTime[$i] - $endTime[$i+1]);   
                    echo $mycalc;
                ?>
            </td>
        </tr>
        $i++;
<?php endwhile;?>

//你的计算在这里就像是不同的
$i++;
尝试的解决方案-2

<?php for($i = 0; $i < count($results); $i++): ?>
    <?php
    $datetime1 = DateTime::createFromFormat('i:s', $results[$i]['StateStarttime']);
    $datetime2 = DateTime::createFromFormat('i:s', $results[$i+1]['StateEndtime']);

    if($datetime2)
        $interval = $datetime1->diff($datetime2)->format('%I:%S');
    else
        $interval = 'unknown';

    ?>
    <tr>
        <td align="Center"><?php echo $results[$i]['id'];?></td>
        <td align="Center"><?php echo $results[$i]['EmpID'];?></td>
        <td align="Center"><?php echo $results[$i]['Date'];?></td>
        <td align="Center"><?php echo $results[$i]['Username'];?></td>
        <td align="Center"><?php echo $results[$i]['Computername'];?></td>
        <td align="Center"><?php echo $results[$i]['State'];?></td>
        <td align="Center"><?php echo $results[$i]['MinutesatState'];?></td>
        <td align="Center"><?php echo $results[$i]['StateStarttime']; ?></td>
        <td align="Center"><?php echo $results[$i]['StateEndtime']; ?></td>
        <td align="Center"><?php echo $results[$i]['Timestamp'];?></td>
        <td align="Center"><?php echo $interval; ?></td>

    </tr>
<?php endfor; ?>

在有人建议我之前

<td align="Center"><?php echo($row['StateEndtime'] - $row['StateStarTtime ']) ?></td>


这将给出同一行中
StateStarTtime
StateEndtime
的微小差异。我想从
StateEndtime
的第二行单元格值中减去
StateStarTtime
的第一行单元格值,依此类推,以找出微小差异。

尝试类似的方法。只有一个指导原则,真正的实施取决于您。另外,我建议您使用
{}
而不是
endwhile

   <?php 
    $last_row = $mysqli_fetch_array($search_result));
    while($row = mysqli_fetch_array($search_result)){
    //this is pseudocode, you will need to convert to date objects
    $timediff = $last_row['StateStarttime'] - $row['StateEndtime'];
    ?>
        <tr>
            <td align="Center"><?php echo $row['id'];?></td>
            <td align="Center"><?php echo $row['EmpID'];?></td>
            <td align="Center"><?php echo $row['Date'];?></td>
            <td align="Center"><?php echo $row['Username'];?></td>
            <td align="Center"><?php echo $row['Computername'];?></td>
            <td align="Center"><?php echo $row['State'];?></td>
            <td align="Center"><?php echo $row['MinutesatState'];?></td>
            <td align="Center"><?php echo $row['StateStarttime'];?></td>
            <td align="Center"><?php echo $row['StateEndtime'];?></td>
            <td align="Center"><?php echo $row['Timestamp'];?></td>
            // echo $timediff
        </tr>
        <?php
        $last_row = $row;
    }?>

尝试与此类似的方法。只有一个指导原则,真正的实施取决于您。另外,我建议您使用
{}
而不是
endwhile

   <?php 
    $last_row = $mysqli_fetch_array($search_result));
    while($row = mysqli_fetch_array($search_result)){
    //this is pseudocode, you will need to convert to date objects
    $timediff = $last_row['StateStarttime'] - $row['StateEndtime'];
    ?>
        <tr>
            <td align="Center"><?php echo $row['id'];?></td>
            <td align="Center"><?php echo $row['EmpID'];?></td>
            <td align="Center"><?php echo $row['Date'];?></td>
            <td align="Center"><?php echo $row['Username'];?></td>
            <td align="Center"><?php echo $row['Computername'];?></td>
            <td align="Center"><?php echo $row['State'];?></td>
            <td align="Center"><?php echo $row['MinutesatState'];?></td>
            <td align="Center"><?php echo $row['StateStarttime'];?></td>
            <td align="Center"><?php echo $row['StateEndtime'];?></td>
            <td align="Center"><?php echo $row['Timestamp'];?></td>
            // echo $timediff
        </tr>
        <?php
        $last_row = $row;
    }?>

是否希望将列
min difference
放入数据库?还是仅仅显示在页面上?另外,您最好的选择是使用PHP,而不是jquery/javascript。我只希望页面上显示最小差异列。我建议您暂时忘掉所有的PHP内容,转而看看:我不明白我已经提供了所有细节。MCVE中的M表示最小。只包含真正需要的内容是有益的。例如,从“尝试的解决方案”中删除代码,并用简单的句子描述它们。是否希望将
min difference
列放入数据库中?还是仅仅显示在页面上?另外,您最好的选择是使用PHP,而不是jquery/javascript。我只希望页面上显示最小差异列。我建议您暂时忘掉所有的PHP内容,转而看看:我不明白我已经提供了所有细节。MCVE中的M表示最小。只包含真正需要的内容是有益的。这方面的一个例子是从“尝试的解决方案”中删除代码,并用一个简单的句子描述它们。这将给出同一行中StateStarTtime和StateEndtime的微小差异。我想从StateEndtime的第二行单元格值中减去StateStarTtime的第一行单元格值,依此类推,以找出微小的差异。它从第二行减去第一行。仔细看。这将给出同一行中StateStarTtime和StateEndtime的微小差异。我想从StateEndtime的第二行单元格值中减去StateStarTtime的第一行单元格值,依此类推,以找出微小差异。它从第二行减去第一行。仔细看看。
   <?php 
    $last_row = $mysqli_fetch_array($search_result));
    while($row = mysqli_fetch_array($search_result)){
    //this is pseudocode, you will need to convert to date objects
    $timediff = $last_row['StateStarttime'] - $row['StateEndtime'];
    ?>
        <tr>
            <td align="Center"><?php echo $row['id'];?></td>
            <td align="Center"><?php echo $row['EmpID'];?></td>
            <td align="Center"><?php echo $row['Date'];?></td>
            <td align="Center"><?php echo $row['Username'];?></td>
            <td align="Center"><?php echo $row['Computername'];?></td>
            <td align="Center"><?php echo $row['State'];?></td>
            <td align="Center"><?php echo $row['MinutesatState'];?></td>
            <td align="Center"><?php echo $row['StateStarttime'];?></td>
            <td align="Center"><?php echo $row['StateEndtime'];?></td>
            <td align="Center"><?php echo $row['Timestamp'];?></td>
            // echo $timediff
        </tr>
        <?php
        $last_row = $row;
    }?>