public function get_next_scheduled_time() {
        global $CFG;

        $validminutes = $this->eval_cron_field($this->minute, self::MINUTEMIN, self::MINUTEMAX);
        $validhours = $this->eval_cron_field($this->hour, self::HOURMIN, self::HOURMAX);

        // We need to change to the server timezone before using php date() functions.
        \core_date::set_default_server_timezone();

        $daysinmonth = date("t");
        $validdays = $this->eval_cron_field($this->day, 1, $daysinmonth);
        $validdaysofweek = $this->eval_cron_field($this->dayofweek, 0, 7);
        $validmonths = $this->eval_cron_field($this->month, 1, 12);
        $nextvalidyear = date('Y');

        $currentminute = date("i") + 1;
        $currenthour = date("H");
        $currentday = date("j");
        $currentmonth = date("n");
        $currentdayofweek = date("w");

        $nextvalidminute = $this->next_in_list($currentminute, $validminutes);
        if ($nextvalidminute < $currentminute) {
            $currenthour += 1;
        }
        $nextvalidhour = $this->next_in_list($currenthour, $validhours);
        if ($nextvalidhour < $currenthour) {
            $currentdayofweek += 1;
            $currentday += 1;
        }
        $nextvaliddayofmonth = $this->next_in_list($currentday, $validdays);
        $nextvaliddayofweek = $this->next_in_list($currentdayofweek, $validdaysofweek);
        $daysincrementbymonth = $nextvaliddayofmonth - $currentday;
        if ($nextvaliddayofmonth < $currentday) {
            $daysincrementbymonth += $daysinmonth;
        }

        $daysincrementbyweek = $nextvaliddayofweek - $currentdayofweek;
        if ($nextvaliddayofweek < $currentdayofweek) {
            $daysincrementbyweek += 7;
        }

        // Special handling for dayofmonth vs dayofweek:
        // if either field is * - use the other field
        // otherwise - choose the soonest (see man 5 cron).
        if ($this->dayofweek == '*') {
            $daysincrement = $daysincrementbymonth;
        } else if ($this->day == '*') {
            $daysincrement = $daysincrementbyweek;
        } else {
            // Take the smaller increment of days by month or week.
            $daysincrement = $daysincrementbymonth;
            if ($daysincrementbyweek < $daysincrementbymonth) {
                $daysincrement = $daysincrementbyweek;
            }
        }

        $nextvaliddayofmonth = $currentday + $daysincrement;
        if ($nextvaliddayofmonth > $daysinmonth) {
            $currentmonth += 1;
            $nextvaliddayofmonth -= $daysinmonth;
        }

        $nextvalidmonth = $this->next_in_list($currentmonth, $validmonths);
        if ($nextvalidmonth < $currentmonth) {
            $nextvalidyear += 1;
        }

        // Work out the next valid time.
        $nexttime = mktime($nextvalidhour,
                           $nextvalidminute,
                           0,
                           $nextvalidmonth,
                           $nextvaliddayofmonth,
                           $nextvalidyear);

        return $nexttime;
    }
public function get_next_scheduled_time() {
        global $CFG;

        $validminutes = $this->eval_cron_field($this->minute, self::MINUTEMIN, self::MINUTEMAX);
        $validhours = $this->eval_cron_field($this->hour, self::HOURMIN, self::HOURMAX);

        // We need to change to the server timezone before using php date() functions.
        \core_date::set_default_server_timezone();

        $daysinmonth = date("t");
        $validdays = $this->eval_cron_field($this->day, 1, $daysinmonth);
        $validdaysofweek = $this->eval_cron_field($this->dayofweek, 0, 7);
        $validmonths = $this->eval_cron_field($this->month, 1, 12);
        $nextvalidyear = date('Y');

        $currentminute = date("i") + 1;
        $currenthour = date("H");
        $currentday = date("j");
        $currentmonth = date("n");
        $currentdayofweek = date("w");

        $nextvalidminute = $this->next_in_list($currentminute, $validminutes);
        if ($nextvalidminute < $currentminute) {
            $currenthour += 1;
        }
        $nextvalidhour = $this->next_in_list($currenthour, $validhours);
        if ($nextvalidhour < $currenthour) {
            $currentdayofweek += 1;
            $currentday += 1;
        }
        $nextvaliddayofmonth = $this->next_in_list($currentday, $validdays);
        $nextvaliddayofweek = $this->next_in_list($currentdayofweek, $validdaysofweek);
        $daysincrementbymonth = $nextvaliddayofmonth - $currentday;
        if ($nextvaliddayofmonth < $currentday) {
            $daysincrementbymonth += $daysinmonth;
        }

        $daysincrementbyweek = $nextvaliddayofweek - $currentdayofweek;
        if ($nextvaliddayofweek < $currentdayofweek) {
            $daysincrementbyweek += 7;
        }

        // Special handling for dayofmonth vs dayofweek:
        // if either field is * - use the other field
        // otherwise - choose the soonest (see man 5 cron).
        if ($this->dayofweek == '*') {
            $daysincrement = $daysincrementbymonth;
        } else if ($this->day == '*') {
            $daysincrement = $daysincrementbyweek;
        } else {
            // Take the smaller increment of days by month or week.
            $daysincrement = $daysincrementbymonth;
            if ($daysincrementbyweek < $daysincrementbymonth) {
                $daysincrement = $daysincrementbyweek;
            }
        }

        $nextvaliddayofmonth = $currentday + $daysincrement;
        if ($nextvaliddayofmonth > $daysinmonth) {
            $currentmonth += 1;
            $nextvaliddayofmonth -= $daysinmonth;
        }

        $nextvalidmonth = $this->next_in_list($currentmonth, $validmonths);
        if ($nextvalidmonth < $currentmonth) {
            $nextvalidyear += 1;
        }

        // Work out the next valid time.
        $nexttime = mktime($nextvalidhour,
                           $nextvalidminute,
                           0,
                           $nextvalidmonth,
                           $nextvaliddayofmonth,
                           $nextvalidyear);

        return $nexttime;
    }
public function get_next_scheduled_time ( ) { global $ CFG ; $ validminutes = $ this -> eval_cron_field ( $ this -> minute , self :: MINUTEMIN , self :: MINUTEMAX ) ; $ validhours = $ this -> eval_cron_field ( $ this -> hour , self :: HOURMIN , self :: HOURMAX ) ; // We need to change to the server timezone before using php date() functions. \ core_date :: set_default_server_timezone ( ) ; $ daysinmonth = date ( "t" ) ; $ validdays = $ this -> eval_cron_field ( $ this -> day , 1 , $ daysinmonth ) ; $ validdaysofweek = $ this -> eval_cron_field ( $ this -> dayofweek , 0 , 7 ) ; $ validmonths = $ this -> eval_cron_field ( $ this -> month , 1 , 12 ) ; $ nextvalidyear = date ( 'Y' ) ; $ currentminute = date ( "i" ) + 1 ; $ currenthour = date ( "H" ) ; $ currentday = date ( "j" ) ; $ currentmonth = date ( "n" ) ; $ currentdayofweek = date ( "w" ) ; $ nextvalidminute = $ this -> next_in_list ( $ currentminute , $ validminutes ) ; if ( $ nextvalidminute < $ currentminute ) { $ currenthour += 1 ; } $ nextvalidhour = $ this -> next_in_list ( $ currenthour , $ validhours ) ; if ( $ nextvalidhour < $ currenthour ) { $ currentdayofweek += 1 ; $ currentday += 1 ; } $ nextvaliddayofmonth = $ this -> next_in_list ( $ currentday , $ validdays ) ; $ nextvaliddayofweek = $ this -> next_in_list ( $ currentdayofweek , $ validdaysofweek ) ; $ daysincrementbymonth = $ nextvaliddayofmonth - $ currentday ; if ( $ nextvaliddayofmonth < $ currentday ) { $ daysincrementbymonth += $ daysinmonth ; } $ daysincrementbyweek = $ nextvaliddayofweek - $ currentdayofweek ; if ( $ nextvaliddayofweek < $ currentdayofweek ) { $ daysincrementbyweek += 7 ; } // Special handling for dayofmonth vs dayofweek: // if either field is * - use the other field // otherwise - choose the soonest (see man 5 cron). if ( $ this -> dayofweek == '*' ) { $ daysincrement = $ daysincrementbymonth ; } else if ( $ this -> day == '*' ) { $ daysincrement = $ daysincrementbyweek ; } else { // Take the smaller increment of days by month or week. $ daysincrement = $ daysincrementbymonth ; if ( $ daysincrementbyweek < $ daysincrementbymonth ) { $ daysincrement = $ daysincrementbyweek ; } } $ nextvaliddayofmonth = $ currentday + $ daysincrement ; if ( $ nextvaliddayofmonth > $ daysinmonth ) { $ currentmonth += 1 ; $ nextvaliddayofmonth -= $ daysinmonth ; } $ nextvalidmonth = $ this -> next_in_list ( $ currentmonth , $ validmonths ) ; if ( $ nextvalidmonth < $ currentmonth ) { $ nextvalidyear += 1 ; } // Work out the next valid time. $ nexttime = mktime ( $ nextvalidhour , $ nextvalidminute , 0 , $ nextvalidmonth , $ nextvaliddayofmonth , $ nextvalidyear ) ; return $ nexttime ; }
Calculate when this task should next be run based on the schedule.
@return int $nextruntime.
Calculate when this task should next be run based on the schedule .