savage[2]
Новичок
Cron и следующая дата выполнения
Господа помогите решить задачу. Пишу функцию, вида: cronNextTimeExe('0 * * * *');
Функция получает строку из crontab, разбирает ее и выдает ближайшее время запуска по указанной строке.
У меня есть ограничения накладываемые на входную строку. Ни каких интервалов все через запятую.
Т.е. строка вида "0 1-3 * * *" должна выглядеть так: "0 1,2,3 * * *"
Первое что я делаю - это разбиваю строку на пробелы получив необходимые числа для минут, часов, дней недели, и т.п.
Дальше... полная путаница из-за того что много различных если. Пока у меня получается получить последнюю дату задачи указанную в строке, а нужна следующая..... + еще не учтен день недели.
После некоторых поисков, я нашел вот этот класс:
http://www.phpclasses.org/browse/package/2568.html
Класс позволяет делать тоже самое, определить дату последнего исполнения команды указанной в строке даты.
Может кто знает как можно вычислить дату следующего исполнения.
Господа помогите решить задачу. Пишу функцию, вида: cronNextTimeExe('0 * * * *');
Функция получает строку из crontab, разбирает ее и выдает ближайшее время запуска по указанной строке.
У меня есть ограничения накладываемые на входную строку. Ни каких интервалов все через запятую.
Т.е. строка вида "0 1-3 * * *" должна выглядеть так: "0 1,2,3 * * *"
Первое что я делаю - это разбиваю строку на пробелы получив необходимые числа для минут, часов, дней недели, и т.п.
Дальше... полная путаница из-за того что много различных если. Пока у меня получается получить последнюю дату задачи указанную в строке, а нужна следующая..... + еще не учтен день недели.
PHP:
function cronNextTimeExe($str)
{
$symbol=Array('i','H','w','j','n');
$cronSet=explode(' ',$str);
$cronTime=Array();
$tmpSet=Array();
for($i=0; $i<sizeof($cronSet); $i++)
{
if($cronSet[$i]=='*') $cronTime[$i]=intval(date($symbol[$i]));
elseif(strstr($cronSet[$i],','))
{
$tmpSet=explode(',',$cronSet[$i]);
$curVal=intval(date($symbol[$i]));
$cronTime[$i]=intval($tmpSet[0]);
for($j=0; $j<sizeof($tmpSet); $j++)
{
if($curVal<intval($tmpSet[$j]))
{
$cronTime[$i]=intval($tmpSet[$j]);
break;
}
}
}
else $cronTime[$i]=intval($cronSet[$i]);
}
return mktime($cronTime[1],$cronTime[0],0,$cronTime[4],$cronTime[3],date('Y'));
}
$time=cronNextTimeExe('0 * * * *');
print $str.'<br />'.$time.'<br />'.date('d.m.Y H:i:s',$time);
http://www.phpclasses.org/browse/package/2568.html
Класс позволяет делать тоже самое, определить дату последнего исполнения команды указанной в строке даты.
Может кто знает как можно вычислить дату следующего исполнения.