Add ability to find out next run time as at a given date, instead of just 'now'

This commit is contained in:
Nathan Gray 2009-06-26 14:26:14 +00:00
parent 05fadb2049
commit 19090879c4

View File

@ -97,16 +97,19 @@ class asyncservice
* for every 5mins in the time from 9am to 5pm. All not set units before the smallest one set, * for every 5mins in the time from 9am to 5pm. All not set units before the smallest one set,
* are taken into account as every possible value, all after as the smallest possible value. * are taken into account as every possible value, all after as the smallest possible value.
* @param boolean $debug if True some debug-messages about syntax-errors in $times are echoed * @param boolean $debug if True some debug-messages about syntax-errors in $times are echoed
* @param int $now Use this time to calculate then next run from. Defaults to time().
* @return int a unix timestamp of the next execution time or False if no more executions * @return int a unix timestamp of the next execution time or False if no more executions
*/ */
function next_run($times,$debug=False) function next_run($times,$debug=False, $now = null)
{ {
if ($this->debug) if ($this->debug)
{ {
echo "<p>next_run("; print_r($times); echo ",'$debug')</p>\n"; echo "<p>next_run("; print_r($times); echo ",'$debug', " . date('Y-m-d H:i', $now) . ")</p>\n";
$debug = True; // enable syntax-error messages too $debug = True; // enable syntax-error messages too
} }
if(is_null($now)) {
$now = time(); $now = time();
}
// $times is unix timestamp => if it's not expired return it, else False // $times is unix timestamp => if it's not expired return it, else False
// //
@ -257,7 +260,7 @@ class asyncservice
foreach($units as $u => $date_pattern) foreach($units as $u => $date_pattern)
{ {
$unit_now = $u != 'dow' ? (int)date($date_pattern) : $unit_now = $u != 'dow' ? (int)date($date_pattern, $now) :
(int)date($date_pattern,mktime(12,0,0,$found['month'],$found['day'],$found['year'])); (int)date($date_pattern,mktime(12,0,0,$found['month'],$found['day'],$found['year']));
if (isset($found[$u])) if (isset($found[$u]))