Я разработал следующий код; для расчета времени ожидания и ожидаемого времени для пациента. Код также должен повторять предупреждение, если пациент слишком долго ждал.
Обратите внимание: Waiting_time – DATETIME в базе данных.
Вот код;
<?php $conn = mysqli_connect("localhost","root","") or die ("No connection"); mysqli_select_db($conn, "a&e") or die('Could not select database.'); $query = "SELECT PatientID, Forename, Surname, Gender, Illness, Priority, Arrival_time,NOW() as now,ABS(TIMEDIFF(NOW(), Arrival_time)) as Waiting_Time FROM Patient"; $result = mysqli_query($conn, $query) or die("Invalid query"); echo "<table border='1'> <tr> <th>PatientID</th> <th>Forename</th> <th>Surname</th> <th>Gender</th> <th>Illness</th> <th>Priority</th> <th>Waiting Time</th> </tr>"; while ($row = $result->fetch_object()){ //Select the expected and discharge time for this patient. $query2 = "SELECT Abs(TIMEDIFF(Expected_Time,'00:00:00')) as Expected,Abs(TIMEDIFF(Discharge_Time,'00:00:00')) as Discharge ". "FROM priority_time ". "WHERE Illness = '".$row->Illness."'". " AND Priority = '".$row->Priority."'". ";"; $result2 = mysqli_query($conn, $query2) or die("Invalid statement: ".$query2); $row2 = $result2->fetch_object(); $expected = $row2->Expected; $discharge = $row2->Discharge; echo "expected-> ".$expected." discharge-> ".$discharge; if($expected > $discharge){ echo "There is a problem with the database consistency, expectedTime must be less than dischargeTime!"; } //Set the patient color. if($row->Waiting_Time < $expected && $row->Waiting_Time < $discharge){ echo "<tr>"; } if($row->Waiting_Time >= $expected && $row->Waiting_Time < $discharge){ echo '<tr bgcolor="#FFFF00">'; } if($row->Waiting_Time > $expected && $row->Waiting_Time > $discharge){ echo '<tr bgcolor="#FF0000">'; } //Print patient info echo "<td>" . $row->PatientID . "</td> <td>" . $row->Forename . "</td> <td>" . $row->Surname . "</td> <td>" . $row->Gender . "</td> <td>" . $row->Illness . "</td> <td>" . $row->Priority . "</td> <td>" . $row->Waiting_Time . "(".$expected."-".$discharge.") </td>"; //Close row echo "</tr>"; } echo "</table>"; mysqli_close($conn); ?>
EDIT: в каждой строке в столбце Время ожидания отображается время ожидания в секундах, а в скобках – текущее время минус и время прибытия, только для проверки. Как преобразовать время ожидания в формат hh: mm: ss, чтобы иметь лучшее представление для пользователя?
Показаны;
Waiting time 01:15:42(10500.000000-10500.000000)
Почему он отображает (10500.000000-10500.000000)?
Попробуй это:
gmdate("H:i:s", $seconds)
Если это не работает, посмотрите, как конвертировать секунды в формат времени?
Обновить:
Чтобы сделать это в SQL-запросе, попробуйте что-то вроде этого:
SELECT TIME_TO_SEC(TIMEDIFF('2013-03-27 12:00:00', '2013-03-27 10:00:00')) diff;
Так что-то вроде этого:
SELECT PatientID , Forename , Surname , Gender , Illness , Priority , Arrival_time , NOW() as now , TIME_TO_SEC(TIMEDIFF(NOW(), Arrival_time)) as Waiting_Time FROM Patient;
Затем вы измените эту строку:
<td>" . $row->Waiting_Time . "(".$expected."-".$discharge.") </td>
к этому:
<td>" . gmdate("H:i:s", $row->Waiting_Time) . "(".$expected."-".$discharge.") </td>
Когда речь идет о датах и времени в php strtotime (), это ваш самый большой друг. Lucky функция date () – это все, что вам нужно для этого. То, что собирается конвертировать секунды в читаемый формат, может быть следующим.
$time = strtotime('now'); echo $time . '<br />'; $var = date('H:i:s',$time); echo $var;