| Classes | |
|---|---|
| Expander | Expands a recurrence rule into occurrence timestamps (RFC 5545, section 3.3.10). Each FREQ period (year, month, week, day, hour, ...) is turned into a set of candidate days and times, which the BYxxx rule parts then filter. Filtering a whole period covers both the "expand" and the "limit" behaviour described in the RFC table, and BYSETPOS then picks from the sorted period set. Calculations use wall-clock dates in the DTSTART timezone, so daylight saving transitions keep the local time, and the process default timezone is never changed. DTSTART always counts as the first occurrence, even when it does not match the rule. SKIP of RFC 7529 moves an instance on an invalid day of the month (e.g. February 30) to the last day of the month or to the first day of the next month; this happens before BYDAY, BYSETPOS and COUNT, and duplicate instances are removed. |
| LocalTime | Converts a local (wall-clock) time to an instant as RFC 5545, section 3.3.5 requires: an ambiguous time (DST fall-back) is the first occurrence, a nonexistent time (DST gap) uses the UTC offset before the gap. PHP itself is not consistent in these cases. |
| RecurrenceLimits | Limits of recurrence expansion; exceeding one throws ResourceLimitException. |
| RecurrenceSet | Recurrence set of RFC 5545, section 3.8.5: RRULE occurrences and RDATE values, minus EXDATE values, as sorted unique timestamps. EXDATE values may also be whole days (date-only EXDATE of a DATE-TIME event), which remove every occurrence on that local day. |
| Rule | Validated recurrence rule (RFC 5545, section 3.3.10) with the RSCALE and SKIP rule parts and leap months of RFC 7529. Weekdays are ISO-8601 numbers (1 = Monday ... 7 = Sunday). |
| Enums | |
| Frequency | FREQ rule part (RFC 5545, section 3.3.10). |
| Skip | SKIP rule part (RFC 7529, section 4.1): handling of instances on an invalid date, e.g. February 30 or February 29 in a common year. |