Hi again... for those who care, feel free to reply with comments... for those who don't.. please ignore!! this is a list of psuedo code/steps/overview of what i'm considering for a kind of scheduling process. the goal is for the user to enter a starttime, as well as specify a periodic function. the resulting output would be the next 'event' time... i've tried to walk through the different scenarios to accommodate the different occurances that i can think of... like i said.. feel free to leave comments.. thanks ------------------------------------------------------------------------ job scheduler - functions user enters: starttime (now, future) future - day:month:year: hour:min day -dayList, monthList, yearList time -hourList, minList validate date/time interval: type: minutes, hour, day, week, month, last-of-the-month number 1, 2, .... =========================================================== when using time, round to 0 secs if user enters only minute: use current hour use current year use current month use current date if user enters only hour: use current min use current year use current month use current date if user enters only min: use current hour use current year use current month use current date if user enters only year: use current min use current hour use current month use current date if user enters only month: use current min use current hour use current year use current date if user enters only date: use current min use current hour use current year use current month if user enters now() (or leaves it blank): app sets min to current min app sets hour to current hour app sets year to current year app sets month to current month app sets date to current date -------------------++ interval: user selects minutes, user selects 'X' as the numeric interval (if 'X' is blank, app defaults 'X' to 5) app gets the year:month:date hour:min app converts the date/time to secs app creates 'interval' ="+".str(X)." minute" (app computes the next time/secs adding X * 60 for the next 'X' minute) this computes every 'X' minutes using strtotime(interval, secs) -gives every minute at the current 'min', or every 20th minute at the 20min mark, etc.. --note:: should the app roll over minuites.. or should it restart at the hour -- or should it perform both, and let the user decide... user selects hourly, user selects 'X' as the numeric interval (if 'X' is blank, app defaults 'X' to 1) app gets the year:month:date hour:min app converts the date/time to secs app creates 'interval' ="+".str(X)." hour" (app computes the next time/secs adding X * 3600 for the next 'X' hour) this computes every 'X' hour, on the 'min' using strtotime(interval, secs) -gives every hour at the current 'min', or every 2nd Hour at the 10min mark, etc.. user selects daily, user selects 'X' as the numeric interval (if 'X' is blank, app defaults 'X' to 1) app gets the year:month:date hour:min app converts the date/time to secs app creates 'interval' ="+".str(X)." day" (app computes the next time/secs adding X * 60*60*24 for the next 'X' day) this computes every 'X' day, on the 'hour:min' using strtotime(interval, secs) -gives every day at the current 'hour:min', or every 2nd Day at the 2:10pm mark, etc.. user selects weekly, user selects 'X' as the numeric interval (if 'X' is blank, app defaults 'X' to 1) app gets the year:month:date hour:min app converts the date/time to secs app creates 'interval' ="+".str(X)." week" (app computes the next time/secs adding X * 60*60*24 for the next 'X' day) this computes every 'X' week, on the 'day:hour:min' using strtotime(interval, secs) -gives every Mon at the current 'hour:min', or every 2nd Tues at 10:00pm, etc.. user selects monthly, user selects 'X' as the numeric interval (if 'X' is blank, app defaults 'X' to 1) app gets the year:month:date hour:min app converts the date/time to secs app creates 'interval' ="+".str(X)." month" (>> redo app computes the next time/secs adding X * 60*60*24 for the next 'X' month) this computes every 'X' month, on the 'date:hour:min' using strtotime(interval, secs) need to include logic to cut limit future month to the 'end date' of the month. don't want to roll over into the next month.. ie, if the date is jan 29, and the next feb only has 28 days.. stop at jan 28... need to incorporate leap year checks, etc... -gives every Month at the current 'date:hour:min', based on the above logic/restrictions/implementation... user selects every 'day' (mtwthf) covered by the weekly section.. (no need for a separate selection) user selects 1st of month covered by the monthly section (no need for a separate selection) user selects 'last-of-month' user selects 'X' as the numeric interval (if 'X' is blank, app defaults 'X' to 1) app gets the startime in linuxsecs, based on user input, or 'default now()' app determines the month based on the computed secs data app app then detemines the last date of the computed month app uses date(-t,secs) to get date... app gets year:month hour:min from the startime/linuxsecs use the date, and the year:month and hour:min to get the final eventsecs for the last-of-month ============================================================================ -----Original Message----- From: Shawn McKenzie [mailto:nospam@xxxxxxxxxxxxx] Sent: Friday, May 29, 2009 2:48 PM To: php-general@xxxxxxxxxxxxx Subject: Re: Numerical Recipe - Scheduling Question bruce wrote: > Hi.. > > Got a need to be able to allow a user to specify the frequency to run > certain apps/processes.. I need to be able to have the user specify a start > Time, as well as a periodic frequency (once, hourly, daily, weekly...) as > well as allow the user to specify every XX minutes... > > So i basically need to be able to determine when the future > events/occurances are, based on the user input. > > I've searched the net for alogorithms dealing with scheduling and haven't > come up with any php based solutions.. I've also looked at numerical recipes > and some other sources (freshmeat/sourceforge/etc..) with no luck.. > > I have found an approach in another language that I could port to php.. But > before I code/recreate this, I figured I'd see if anyone here has pointers > or suggestions... > > Cron doesn't work for me, as it can run a process at a given time.. but it > doesn't tell me when the next 'X' occurance would be... > > Thoughts/Comments.. > > Thanks > This is confusing. When and where do you need to "be able to determine when the future events/occurances are"? You need to display this after the user schedules the app/process or an admin needs to login and see this at any given time? Regardless it is easy with the PHP time/date functions. Once you've collected and stored the start/stop times and interval, something similar to: $interval = "1 week"; $next = $start_time; while ($next <= $end_time) { $next = strtotime("+$interval", $next); echo date(DATE_RFC822, $next) ."\n"; } -- Thanks! -Shawn http://www.spidean.com -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php