当状态更改为准备/准备时,计时器开始计时。然后,我想停止计时器,计算状态变为就绪时的差值,并将其作为时间存储在数据库中。我尝试了各种方法,但似乎都没能奏效,我做错了什么?感谢
if(isset($_POST['prepare'])){
$_SESSION['startTime'] = time();
$question2="UPDATE `order` SET orderStatus='Preparing', idEmployee='$_SESSION[id]' WHERE idorder='$_POST[id]'";
$sth = $db->prepare($question2);
$sth->execute();
}
if(isset($_POST['ready'])){
$total = time() - $_SESSION['startTime'];
echo date('h:i:s', $total);
$question2="UPDATE `order` SET orderStatus='Completed', timeCompleted='$total' WHERE idorder='$_POST[id]'";
$sth = $db->prepare($question2);
$sth->execute();
}
edit:我只需在DateTime类中使用一个方法就克服了问题。我首先记录了订单发出的时间,还记录了订单完成的时间。然后,我使用diff()方法计算两个记录时间之间的差异,并将结果存储在我的数据库中。
if(isset($_POST['prepare'])){
$_SESSION['startTime'] = new DateTime();
$question2="UPDATE `order` SET orderStatus='Preparing', idEmployee='$_SESSION[id]' WHERE idorder='$_POST[prepare]'";
$sth = $db->prepare($question2);
$sth->execute();
}
if(isset($_POST['ready'])){
$endTime = new DateTime();
$i = $_SESSION['startTime']->diff($endTime);
$end = $i->format('%h:%i:%s');
$question2="UPDATE `order` SET orderStatus='Completed', timeCompleted='$end' WHERE idorder='$_POST[ready]'";
$sth = $db->prepare($question2);
$sth->execute();
}
用$total = time() - strtotime($_SESSION['startTime'])
替换$total = time() - $_SESSION['startTime']
如果你没有,请在代码顶部添加session_start();
然后它就会起作用。
如果prepare和ready都是由同一个人(在同一会话内)在同一台机器上执行的,则此代码应该可以工作。如果你相信这一切都是真的,我会检查以确保会话变量被设置为print_r($_session)
但是,我建议您将orderStatus更新为"Preparing",创建一个名为timeStarted的新列并将其更新为time(),然后当您更新为"Completed"时,将timecompleted也设置为time(
然后,您可以像当前一样轻松地计算出差异(如果此代码确实有效,则timeCompleted实际上是timeTaken)-为此,您甚至可以添加第三列,即两者之间的差异,以便于报告。
这样做意味着,如果花费的时间比会话更长,或者计算机重新启动/重新登录,则startTime不会丢失