【问题标题】:How To offset an HTML table with PHP to Subtract cell value of 1st row from 2nd row cell value of different columns如何使用 PHP 偏移 HTML 表格以从不同列的第二行单元格值中减去第一行的单元格值
【发布时间】:2019-06-30 13:04:15
【问题描述】:

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

我正在使用 PHP 和 Mysql 查询生成一个 HTML 表(表看起来像这样Table

DB ID   EmpID   Date        Username    Computername    State   Minutesatstate  Statestarttime  Stateendtime        Timestamp
704634  303836  02-06-2019  user        PC-818          Idle    2               13:44           13:46               2019-02-06 13:46:46
704599  303836  02-06-2019  user        PC-818          Active  16              13:28           13:44               2019-02-06 13:44:46
704340  303836  02-06-2019  user        NIPL-1220       Active  2               13:27           13:28               2019-02-06 13:28:48
704313  303836  02-06-2019  user        PC-818          Active  13              13:15           13:27               2019-02-06 13:27:31

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

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

预期结果示例

StateStarTtime    StateEndTime   Min Difference 

03:57             03:58          00:03
03:53             03:54          00:04
03:46             03:49          null

我能够找到很多示例并帮助从第一行的 StateEndTime 中减去 StateStartTtime,但我想从 StateEndTime 的第二行单元格值中减去 StateStartTime 的第一行单元格值以找到分钟差。

我是 HTML 和 PHP 的初学者,但对 JS/JQ 完全陌生,因此非常感谢我如何做到这一点的任何方向。下面是我正在使用的 PHP 和 HTML 代码 sn-p。如果您需要完整的代码,请告诉我。

从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;
}

?>

表格 PHP 代码

            <?php 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>


            </tr>
            <?php endwhile;?>

尝试过的解决方案 - 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;?>

尝试过的解决方案 - 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>

这将给我StateStarTtimeStateEndtime 在同一行中的分钟差异我想从StateEndTime 的第二行单元格值中减去StateStarTtime 的第一行单元格值等等以找到分钟区别。

【问题讨论】:

  • 您希望将列min difference 放入您的数据库吗?还是只显示在页面上?此外,最好的办法是使用 PHP,而不是 jquery/javascript。
  • 我只想在页面上显示最小差异列。
  • 我建议你暂时忘掉所有 PHP 的东西,而是看看:Why should I provide an MCVE for what seems to me to be a very simple SQL query?
  • 我不明白我已经提供了所有细节。
  • MCVE 中的 M 表示最小。仅包含真正需要的内容将是有益的。这方面的一个例子是从您的“尝试过的解决方案”中删除代码并用一个简单的句子描述它们。

标签: javascript php jquery mysql html


【解决方案1】:

尝试一些类似的东西。只是一个指导方针,真正的实施取决于你。另外我建议您使用{} 而不是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;
    }?>

【讨论】:

  • 这将给我同一行中 StateStartTtime 和 StateEndtime 的分钟差 我想从 StateEndTime 的第二行单元格值中减去 StateStartTime 的第一行单元格值,依此类推以找到分钟差.
  • 第二行减去第一行。仔细看看。
猜你喜欢
  • 1970-01-01
  • 2013-06-30
  • 2011-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-16
相关资源
最近更新 更多