protected function nextMonthly()
    {
        $currentDayOfMonth = $this->currentDate->format('j');
        if (!$this->byMonthDay && !$this->byDay) {
            // If the current day is higher than the 28th, rollover can
            // occur to the next month. We Must skip these invalid
            // entries.
            if ($currentDayOfMonth < 29) {
                $this->currentDate = $this->currentDate->modify('+'.$this->interval.' months');
            } else {
                $increase = 0;
                do {
                    ++$increase;
                    $tempDate = clone $this->currentDate;
                    $tempDate = $tempDate->modify('+ '.($this->interval * $increase).' months');
                } while ($tempDate->format('j') != $currentDayOfMonth);
                $this->currentDate = $tempDate;
            }

            return;
        }

        while (true) {
            $occurrences = $this->getMonthlyOccurrences();

            foreach ($occurrences as $occurrence) {
                // The first occurrence thats higher than the current
                // day of the month wins.
                if ($occurrence > $currentDayOfMonth) {
                    break 2;
                }
            }

            // If we made it all the way here, it means there were no
            // valid occurrences, and we need to advance to the next
            // month.
            //
            // This line does not currently work in hhvm. Temporary workaround
            // follows:
            // $this->currentDate->modify('first day of this month');
            $this->currentDate = new DateTimeImmutable($this->currentDate->format('Y-m-1 H:i:s'), $this->currentDate->getTimezone());
            // end of workaround
            $this->currentDate = $this->currentDate->modify('+ '.$this->interval.' months');

            // This goes to 0 because we need to start counting at the
            // beginning.
            $currentDayOfMonth = 0;

            // To prevent running this forever (better: until we hit the max date of DateTimeImmutable) we simply
            // stop at 9999-12-31. Looks like the year 10000 problem is not solved in php ....
            if ($this->currentDate->getTimestamp() > 253402300799) {
                $this->currentDate = null;

                return;
            }
        }

        $this->currentDate = $this->currentDate->setDate(
            (int) $this->currentDate->format('Y'),
            (int) $this->currentDate->format('n'),
            (int) $occurrence
        );
    }
protected function nextMonthly()
    {
        $currentDayOfMonth = $this->currentDate->format('j');
        if (!$this->byMonthDay && !$this->byDay) {
            // If the current day is higher than the 28th, rollover can
            // occur to the next month. We Must skip these invalid
            // entries.
            if ($currentDayOfMonth < 29) {
                $this->currentDate = $this->currentDate->modify('+'.$this->interval.' months');
            } else {
                $increase = 0;
                do {
                    ++$increase;
                    $tempDate = clone $this->currentDate;
                    $tempDate = $tempDate->modify('+ '.($this->interval * $increase).' months');
                } while ($tempDate->format('j') != $currentDayOfMonth);
                $this->currentDate = $tempDate;
            }

            return;
        }

        while (true) {
            $occurrences = $this->getMonthlyOccurrences();

            foreach ($occurrences as $occurrence) {
                // The first occurrence thats higher than the current
                // day of the month wins.
                if ($occurrence > $currentDayOfMonth) {
                    break 2;
                }
            }

            // If we made it all the way here, it means there were no
            // valid occurrences, and we need to advance to the next
            // month.
            //
            // This line does not currently work in hhvm. Temporary workaround
            // follows:
            // $this->currentDate->modify('first day of this month');
            $this->currentDate = new DateTimeImmutable($this->currentDate->format('Y-m-1 H:i:s'), $this->currentDate->getTimezone());
            // end of workaround
            $this->currentDate = $this->currentDate->modify('+ '.$this->interval.' months');

            // This goes to 0 because we need to start counting at the
            // beginning.
            $currentDayOfMonth = 0;

            // To prevent running this forever (better: until we hit the max date of DateTimeImmutable) we simply
            // stop at 9999-12-31. Looks like the year 10000 problem is not solved in php ....
            if ($this->currentDate->getTimestamp() > 253402300799) {
                $this->currentDate = null;

                return;
            }
        }

        $this->currentDate = $this->currentDate->setDate(
            (int) $this->currentDate->format('Y'),
            (int) $this->currentDate->format('n'),
            (int) $occurrence
        );
    }
protected function nextMonthly ( ) { $ currentDayOfMonth = $ this -> currentDate -> format ( 'j' ) ; if ( ! $ this -> byMonthDay && ! $ this -> byDay ) { // If the current day is higher than the 28th, rollover can // occur to the next month. We Must skip these invalid // entries. if ( $ currentDayOfMonth < 29 ) { $ this -> currentDate = $ this -> currentDate -> modify ( '+' . $ this -> interval . ' months' ) ; } else { $ increase = 0 ; do { ++ $ increase ; $ tempDate = clone $ this -> currentDate ; $ tempDate = $ tempDate -> modify ( '+ ' . ( $ this -> interval * $ increase ) . ' months' ) ; } while ( $ tempDate -> format ( 'j' ) != $ currentDayOfMonth ) ; $ this -> currentDate = $ tempDate ; } return ; } while ( true ) { $ occurrences = $ this -> getMonthlyOccurrences ( ) ; foreach ( $ occurrences as $ occurrence ) { // The first occurrence thats higher than the current // day of the month wins. if ( $ occurrence > $ currentDayOfMonth ) { break 2 ; } } // If we made it all the way here, it means there were no // valid occurrences, and we need to advance to the next // month. // // This line does not currently work in hhvm. Temporary workaround // follows: // $this->currentDate->modify('first day of this month'); $ this -> currentDate = new DateTimeImmutable ( $ this -> currentDate -> format ( 'Y-m-1 H:i:s' ) , $ this -> currentDate -> getTimezone ( ) ) ; // end of workaround $ this -> currentDate = $ this -> currentDate -> modify ( '+ ' . $ this -> interval . ' months' ) ; // This goes to 0 because we need to start counting at the // beginning. $ currentDayOfMonth = 0 ; // To prevent running this forever (better: until we hit the max date of DateTimeImmutable) we simply // stop at 9999-12-31. Looks like the year 10000 problem is not solved in php .... if ( $ this -> currentDate -> getTimestamp ( ) > 253402300799 ) { $ this -> currentDate = null ; return ; } } $ this -> currentDate = $ this -> currentDate -> setDate ( ( int ) $ this -> currentDate -> format ( 'Y' ) , ( int ) $ this -> currentDate -> format ( 'n' ) , ( int ) $ occurrence ) ; }
Does the processing for advancing the iterator for monthly frequency.
Does the processing for advancing the iterator for monthly frequency .