タスクの 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);
}
}