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:[email protected]]
Sent: Friday, May 29, 2009 2:48 PM
To: [email protected]
Subject: [PHP] 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