작업의 시작 시간, 종료 시간 및 빈도가있는 데이터베이스가 있습니다 실행 (everyMinutes).24 시부 터 00시 (00:00:00)가 아닌 23:59:00 미만의 무한 루프를 중지하십시오.
나는이 데이터를 PHP로 가져와 예상 시간을 별도의 테이블에 쓰는 루프를 사용하고있다. 문제는 작업이 00:00:00
에서 시작하여 23:59:00
에서 끝나는 경우입니다. 기능적으로 이는 하루 종일 실행됨을 의미합니다. everyMinutes
이 15이면 00:00:00
에서 시작하여 00:00:15
에서 다시 실행합니다.
내 코드의 문제는 $latestRunTime
이 $endTime
보다 작은 23:45:00
이 될 것이므로 다시 반복됩니다. 그러나 루프의 끝에서 $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);
}
}
를 사용하여 전체 날짜 *와 * 시간, 적어도 당신의 루프하지 않을 경우 데이터베이스에서뿐만 아니라. – Sammitch
불행히도 데이터베이스의 데이터 유형을 제어 할 수 없으며 '시간 (7)입니다. – mhopkins321
if 문을 사용하여 시간이 00:00:00인지 확인하고 변경하는 경우에만 사용할 수 있습니까? 24:00:00? – MatthewMcGovern