Javascript 如何用PHP偏移HTML表,从不同列的第二行单元格值中减去第1行的单元格值
好的,我从上周开始尝试解决这个问题,但还没有找到解决方案。我问了很多次这个问题,但都无法让代码正常工作,所以我把所有细节都放在这个问题中 我正在使用PHP和Mysql查询生成一个HTML表(表如下所示) 我想用PHP、Jquery或Javascript添加另一列,用第二行的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
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;
}?>