i have cron job starts every hour , sends messages. if starts every hour, sends messages 24 times day. user may set different amount of times cron job may start - if chooses 12 times, cron jobs work every odd (or even) hour in following pattern:
- 10101010...etc
where 1 hour job worked , 0 idle hour. problem dont know how make program workout such pattern other amount of times automatically, 15 or 17 or somethins else. such user inputs pattern be:
- 110110110...etc
with last hours broken (it 111 or 100). tried divide 15 24, add 1, compare amount of hours since last sending (if 1<1.5 don`t send, 2>1.5 send) end 101010 pattern everytime. , unfortunately cannot run cron every minute, starts on hourly basis. thank you.
based on you're trying do, more cron job runs, more accurate times be. if has every hour, user selects between 17 , 24 execute every hour. therefore wouldn't make sense provide options. if have let user choose number , execute evenly throughout day, have run cron job more once er hour.
this example assumes run cron job once per minute, ie:
*/1 * * * * <your command>
// how many times per day, db $userinput = 17; $secondsperday = 60 * 60 * 24; $frequency = (int) ($secondsperday / $userinput) -1; $midnight = strtotime('today midnight'); // array of times execute $executetimes = array(); for($time=$midnight; $time<=($midnight+$secondsperday); $time+=$frequency) $executetimes[] = date("g:i a", $time); $currenttime = date("g:i a"); $execute = in_array($currenttime, $executetimes); if(!$execute) exit; // cron job codes here
here exmaple: https://3v4l.org/0pcxh
note: think ther's off-by-one error should gist this..