Итак, я пытаюсь решить эту проблему с прошлой недели и пока не нашел решения. Я задаю Вопрос много раз, но не могу заставить Код работать, поэтому я помещаю все детали в этот вопрос.
Я генерирую таблицу HTML с помощью запросов PHP и Mysql (таблица выглядит следующим образом https://ibb.co/2k8XbbZ)
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 1-й строки со столбцом Stateendtime 2-й строки, чтобы выяснить разницу во времени
Я не хочу, чтобы информация о минимальной разнице вводилась в любую базу данных, я просто хочу, чтобы она отображалась на странице.
пример ожидаемых результатов
StateStarTtime StateEndTime Min Difference
03:57 03:58 00:03
03:53 03:54 00:04
03:46 03:49 null
Я могу найти так много примеров и помощи для вычитания StateStarTtime из StateEndTime в первой строке, но я хочу вычесть значение ячейки 1-й строки StateStarTtime из значения ячейки 2-й строки StateEndTime, чтобы найти минимальную разницу.
Я новичок в 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;
}
?>
Настольный 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>
Это даст мне разность минут StateStarTtime и StateEndtime в той же строке, в которой я хочу вычесть значение ячейки 1-й строки StateStarTtime из значения ячейки 2-й строки StateEndTime и так далее, чтобы найти разницу в минутах.
Попробуйте что-нибудь подобное. Только руководство, реальная реализация зависит от вас. Также я бы порекомендовал вам использовать {}
а не в 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;
}?>
Я бы порекомендовал вам вычитать даты через MySQL, а затем отображать их с помощью PHP. Измените ваш запрос выбора на что-то вроде этого:
Вместо SELECT * FROM...
Получите разницу как часть вашего запроса (это не будет работать так, как написано):
SELECT WHATEVER_COLUMNS_YOU_NEED, TIMESTAMPDIFF(SECOND,Statestarttime,Stateendtime) AS min_diff FROM...
Перевод даты из MySQL в PHP и последующая работа над ней усложняют задачу, которая должна быть для вас. Обработайте проблему, используя MySQL, и отправьте ее в PHP.
Кроме того: Ваш код уязвим для SQL-инъекций, используйте операторы PHP Prepared для дополнительной безопасности!
min difference
столбца была помещена в вашу базу данных? Или просто отображается на странице? Также лучше всего делать это с PHP, а не с jquery / javascript.