issues with DATETIME in database

别等时光非礼了梦想. 提交于 2019-12-24 12:15:17

问题


I have devised the following code; to calculate the waiting time and expected time for a patient. The code should also echo a warning if the patient has been waiting too long.

Please note: Waiting_time is DATETIME in the database.

Here is the code;

<?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: On each row, in the column Waiting Time it is showing the waiting time in seconds, and in brackets the currentTime a minus and the arrival time, just for checking. How do I convert the waiting time to the format hh:mm:ss to have a better representation for the user?

Showing;

Waiting time 
01:15:42(10500.000000-10500.000000)

Why is it displaying (10500.000000-10500.000000)?


回答1:


Try this:

gmdate("H:i:s", $seconds)

If that doesn't work, have a look at How to convert seconds to time format?

Update:

To do this in the SQL statement try something like this:

SELECT TIME_TO_SEC(TIMEDIFF('2013-03-27 12:00:00', '2013-03-27 10:00:00')) diff;

So something like this:

SELECT PatientID
, Forename
, Surname
, Gender
, Illness
, Priority
, Arrival_time
, NOW() as now
, TIME_TO_SEC(TIMEDIFF(NOW(), Arrival_time)) as Waiting_Time 
FROM Patient;

Then you would change this line:

<td>" . $row->Waiting_Time . "(".$expected."-".$discharge.") </td>

to this:

<td>" . gmdate("H:i:s", $row->Waiting_Time) . "(".$expected."-".$discharge.") </td>



回答2:


When dealing with dates and times in php strtotime() is your biggest friend. Lucky the date() function is all you need for this. Something that is going to convert seconds to a readable format could be the following.

$time = strtotime('now');
echo $time . '<br />';
$var =  date('H:i:s',$time);
echo $var;


来源:https://stackoverflow.com/questions/15658441/issues-with-datetime-in-database

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!