我有一个数据库,它包含一个任务的startTime,endTime以及它运行的频率(everyMinutes)。
我将这些数据带入php,并使用循环将所有预期时间写入单独的表。问题是当任务从00:00:00
开始并在23:59:00
结束时。从功能上讲,这意味着它全天运行。如果everyMinutes
为15,那么它将从00:00:00
开始,然后再次在00:00:15
处运行。
以下代码的问题是,$latestRunTime
将23:45:00
小于$endTime
,因此会再次进行迭代。但是,不是在循环结束时大于$endTime
,而是将其设置回00:00:00
并且我陷入无限循环。我该如何缓解这种情况?
$getTaskDetailQuery = "SELECT taskID, startTime, endTime, everyMinutes FROM frequencyTable WHERE everyMinutes != '00:00:00' ORDER BY taskID ASC";
$stmt = sqlsrv_query($conn, $getTaskDetailQuery);
if($stmt === FALSE){
die(print_r(sqlsrv_errors(), true));
}
$insertQueryMulti = "INSERT INTO exactTimeScheduleTable (taskID, expectedTime) VALUES (?, ?)";
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)){
$taskID = $row['taskID'];
$startTimeRaw = $row['startTime'];
$endTimeRaw = $row['endTime'];
$everyMinutesRaw = $row['everyMinutes'];
$startTime = $startTimeRaw->format('H:i:s');
$endTime = $endTimeRaw->format('H:i:s');
$everyMinutes = $everyMinutesRaw->format('H:i:s');
$secs = strtotime($everyMinutes)-strtotime("00:00:00");
$latestRunTime = date("H:i:s",strtotime($startTime));
while ($latestRunTime < $endTime){
$timeToInsertRaw = strtotime($latestRunTime);
$dataForInsert = array($taskID,$latestRunTime);
$execute = sqlsrv_query($conn, $insertQueryMulti, $dataForInsert);
$latestRunTime = date("H:i:s",strtotime($latestRunTime)+$secs);
}
}
答案 0 :(得分:2)
只需将其添加为while循环中的最后一行:
if($latestRunTime == "00:00:00") break;
答案 1 :(得分:0)
您目前正在检查上次运行操作是否在可接受的时间限制内,只需更改它以检查 next 运行操作是否在接受的时间限制内
while (strtotime($latestRunTime)+$secs < $endTime);