我该如何在php中处理状态更改之间的时间安排


How would I go about timing between status changes in php?

当状态更改为准备/准备时,计时器开始计时。然后,我想停止计时器,计算状态变为就绪时的差值,并将其作为时间存储在数据库中。我尝试了各种方法,但似乎都没能奏效,我做错了什么?感谢

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不会丢失