PackageTrack
Sign in Get early access

rlanvin/php-rrule

Lightweight and fast recurrence rules for PHP (RFC 5545)

v3.0.0 13M downloads/mo #1059 most downloaded on Packagist rlanvin/php-rrule

What this package is like to depend on

Last release 25 days ago

29 Jul 2026

Release timing varies

gaps range from 2 weeks to 1.3 years

Nearly every release is documented

notes for 30 of 30 stable releases

Nothing withdrawn

no release was ever pulled

10 years old

31 releases · first in 2016

1 release in the last 12 months

see the full history below

Release timeline

31 releases · Mar 2016 to Jul 2026
2017 2018 2019 2020 2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 31
  1. v3.0.0 29 Jul 2026
    Release notes
    • Drop support for PHP < 7.3 #119
    • Add support for PHP 8.4

    Fixed

    • Added a workaround for a Carbon 3 bug that makes occursAt fail in some cases #164
    • Fix RSet not de-duplicating when using array access #165
    • Fix timezone conversion skipped with DateTimeImmutable #171
    Open source →
    Release notes
    • Drop support for PHP < 7.3 #119
    • Add support for PHP 8.4

    Fixed

    • Added a workaround for a Carbon 3 bug that makes occursAt fail in some cases #164
    • Fix RSet not de-duplicating when using array access #165
    • Fix timezone conversion skipped with DateTimeImmutable #171
    Open source →
  2. v2.6.0 25 Apr 2025
    Release notes

    Added

    • Bengali (bn) localization #159
    • Danish (da) localization #161
    • Greek (el) localization #157
    • Russian (ru) localization #153
    Open source →
    Release notes

    Added

    • Bengali (bn) localization #159
    • Danish (da) localization #161
    • Greek (el) localization #157
    • Russian (ru) localization #153
    Open source →
  3. v2.5.2 21 Feb 2025
    Release notes

    Fixed

    • Fix "november" typo in french translation #155
    • Fix incorrect calculation from partially filled cache #160
    Open source →
    Release notes

    Fixed

    • Fix "november" typo in french translation #155
    • Fix incorrect calculation from partially filled cache #160
    Open source →
  4. v2.5.1 23 Jun 2024
    Release notes

    Fixed

    • Fix insufficient type detection for FREQ and WKST leading to deprecation warning in tests with PHP 8.3 #149
    • Fix failing tests with ICU 72.1 because of NNBSP
    • Fix C.UTF8 locale support when intl isn't installed
    Open source →
    Release notes

    Fixed

    • Fix insufficient type detection for FREQ and WKST leading to deprecation warning in tests with PHP 8.3 #149
    • Fix failing tests with ICU 72.1 because of NNBSP
    • Fix C.UTF8 locale support when intl isn't installed
    Open source →
  5. v2.5.0 08 Jun 2024
    Release notes

    Fixed

    • Swedish: Corrects the spelling of monday and the grammar of enumeration partials. #134
    • Spanish: Improve clarity in daily and weekly recurrence translation #147
    • Dutch: weekdays and months are written in lowercase #136
    • Better handle TZ with Exchange / M365 generated iCal files #143

    Added

    • Human readable time of day option #124
    • Japanese translation #139
    • Czech translation #137
    Open source →
    Release notes

    Fixed

    • Swedish: Corrects the spelling of monday and the grammar of enumeration partials. #134
    • Spanish: Improve clarity in daily and weekly recurrence translation #147
    • Dutch: weekdays and months are written in lowercase #136
    • Better handle TZ with Exchange / M365 generated iCal files #143

    Added

    • Human readable time of day option #124
    • Japanese translation #139
    • Czech translation #137
    Open source →
  6. v2.4.1 07 Jun 2023
    Release notes

    Fixed

    • Correctly parse DateTimeImmutable #132
    • Fix namespace on return type #130
    • Humanreadable gets monthly wrong #129
    Open source →
    Release notes

    Fixed

    • Correctly parse DateTimeImmutable #132
    • Fix namespace on return type #130
    • Humanreadable gets monthly wrong #129
    Open source →
  7. v2.4.0 06 Jan 2023
    Release notes

    Fixed

    • Exclude files from dist packages #110
    • Improve German translation #112
    • Daylight Saving Time issue with PHP 8.1 #120

    Added

    • Added Portugese translation #108
    • Added Polish translation #106
    Open source →
    Release notes

    Fixed

    • Exclude files from dist packages #110
    • Improve German translation #112
    • Daylight Saving Time issue with PHP 8.1 #120

    Added

    • Added Portuguese translation #108
    • Added Polish translation #106
    Open source →
  8. v2.3.2 03 May 2022
    Release notes

    Fixed

    • Fix timezone (and the entire rule) changed to uppercase if rule was created using createdFromRfcString #103
    Open source →
    Release notes

    Fixed

    • Fix timezone (and the entire rule) changed to uppercase if rule was created using createdFromRfcString #103
    Open source →
  9. v2.3.1 22 Apr 2022
    Release notes

    Fixed

    • Fix microseconds not always removed from dtstart, causing date comparison issues with specific date input #104
    Open source →
    Release notes

    Fixed

    • Fix microseconds not always removed from dtstart, causing date comparison issues with specific date input #104
    Open source →
  10. v2.3.0 25 Oct 2021
    Release notes

    Added

    • Added Swedish translation #96
    • Added bin/review_translations.php as a helper for translators and contributors
    • Added Hebrew translation #95

    Fixed

    • Fix Finnish translation #94
    • Update French translation
    • Update German translation
    • Fix compatibility with PHP 8.1 #100
    Open source →
    Release notes

    Added

    • Added Swedish translation #96
    • Added bin/review_translations.php as a helper for translators and contributors
    • Added Hebrew translation #95

    Fixed

    • Fix Finnish translation #94
    • Update French translation
    • Update German translation
    • Fix compatibility with PHP 8.1 #100
    Open source →
  11. v2.2.2 09 Jan 2021
    Release notes

    Fixed

    • Fix getOccurrencesAfter returns empty array when $inclusive is false and $limit is not set #93
    Open source →
  12. v2.2.1 09 Dec 2020
    Release notes

    Fixed

    • Fix support for DateTimeImmutable #90
    Open source →
  13. v2.2.0 01 Nov 2019
    Release notes

    Added

    • Persian (Farsi) translation #72
    • Support for Windows timezone #69

    Fixed

    • Fix valid rules wrongly detected as not producing results, and cut short after MAX_CYCLES #78
    • Fix RRule::createFromRfcString not detecting RSet properly if the rule was lowercase
    • [internal] Replace static variables by array constants (permitted since PHP 5.6). Shouldn't break backward compatibility unless you were doing weird things with this lib in the first place.
    Open source →
  14. v2.1.0 15 Jan 2019
    Release notes

    Fixed

    • Fix locale format for i18n files without intl extension #67

    Added

    • Added new methods to RSet: removeDate, clearDates, removeExDate and clearExDates #66
    Open source →
  15. v2.0.0 14 Jan 2019
    Release notes
    • Add support for PHP 7.3
    Open source →
  16. v2.0.0-rc1 13 Jan 2019 pre-release
    Release notes
    • Rewrite the core algorithm to use a native PHP generator, drop compatibility with PHP < 5.6 #43

    Added

    • New option custom_path to humanReadable() to use custom translation files #56
    • New helpers methods #60
      • getOccurrencesBefore
      • getOccurrencesAfter
      • getNthOccurrencesBefore
      • getNthOccurrencesAfter
      • getNthOccurrencesFrom
    Open source →
  17. v1.6.3 13 Jan 2019
    Release notes

    Fixed

    • Fix error when timezone is an offset instead of an olson name. #61
    • Fix VALUE is a valid param of EXDATE #62
    Open source →
  18. v1.6.2 17 Aug 2018
    Release notes

    Fixed

    • Fix typo in NL translation #53
    Open source →
  19. v1.6.1 13 Apr 2018
    Release notes

    Fixed

    • Null check to prevent 0 (false) values being lost when exporting to RFC string #50
    • Fix warning in humanReadable() #44
    • Fix typo in NL translation #46
    Open source →
  20. v1.6.0 11 Oct 2017
    Release notes

    Added

    • German translation #38
    • Add include_until option to humanReadable to omit the "until" part of the rule #36
    Open source →
  21. v1.5.1 15 May 2017
    Release notes

    Fixed

    • Throw exception when passing a float instead of an int (e.g. INTERVAL=1.5) instead of casting silently
    • Variable name typo #34
    Open source →
  22. v1.5.0 07 May 2017
    Release notes

    Added

    • Add explicit_infinite and include_start options to humanReadable to respectivity omit "forever" and the start date from the sentence.
    • RSet constructor now accepts a string to build a RSET from a RFC string #26
    • New factory method RRule::createFromRfcString() to build either a RRule or a RSet from a string
    • Add a $limit parameter to getOccurrences() and getOccurrencesBetween() to make working with infinite rule easier
    • Add a $dtstart parameter to RRule and RSet constsructor to specify dtstart when working with a RFC string without DTSTART.

    Fixed

    • When creating a RRule, the RFC parser will not accept multiple DTSTART or RRULE lines

    Deprecated

    • RRule::parseRfcString is deprecated. Note: it wasn't part of the documentation in the first place, but just in case someone is using it, it's not removed yet.
    Open source →
  23. v1.4.2 29 Mar 2017
    Release notes

    Fixed

    • humanReadable() fails if the RRule was created from a RFC string containing the timezone (e.g. DTSTART;TZID=America/New_York:19970901T090000)
    Open source →
  24. v1.4.1 02 Feb 2017
    Release notes

    Fixed

    • RRule::offsetGet and RSet::offsetGet throw InvalidArgumentException for illegal offset types #22
    • Update exception message for UNTIL parse error #23
    • Fix parser handling of UNTIL when DTSTART is not provided #25
    • Accept invalid RFC strings generated by the JS lib but triggers a Notice message #25
    • Rework RRule::i18nLoad() to accept locales such as en_sg and use Locale::parseLocale when possible #24
    • Fix humanReadable fails with intl enabled when the timezone is "Z" #24
    Open source →
  25. v1.4.0 11 Nov 2016
    Release notes

    Added

    • Add RRule::getRule() method to return original rule array #17
    • Add RSet::getRRules(), RSet::getExRules(), RSet::getDates() and RSet::getExDates()
    • Tests for PHP 7.0

    Fixed

    • Fix a bug in rfcString when using a frequency constant (instead of a string) to create the rule #16
    • Fix a undefined index bug in RFC parser
    Open source →
  26. v1.3.1 09 Aug 2016
    Release notes

    Added

    • Italian translation (it) #14

    Fixed

    • Fixed a bug when combining values with an integer modifier and regular values in BYDAY (example 1MO,FR)
    • Fixed RRule created with a timestamp start date generates an invalid RFC string #15
    Open source →
  27. v1.3.0 08 Jul 2016
    Release notes

    Added

    • Spanish translation (es) #12
    • $include_timezone parameter to RRule::rfcString() to produce a RFC string without timezone information

    Fixed

    • RRule::parseRfcString() is stricter and will not accept invalid DTSTART and UNTIL formats (use the array syntax in the constructor with DateTime objects if you need to create rules with complex combinations of timezones). #13
    Open source →
  28. v1.2.0 09 Apr 2016
    Release notes

    Added

    • Support for fallback locale when using RRule::humanReadable() #11
    • Dutch translation (nl) #9

    Fixed

    • Fixed fatal error Locale class not found when intl extension is not loaded #10
    Open source →
  29. v1.1.0 30 Mar 2016
    Release notes

    Added

    • New class RRule\RSet (recurrence set) that can combine multiple RRULE, EXRULE, RDATE and EXDATE. #7
    • New interface RRule\RRuleInterface to unify RRule and RSet
    • New methods: isFinite(), isInfinite()

    Fixed

    • Fix bug preventing the iteration of multiple instances of RRule at the same time
    • Fix occursAt failing when the date passed was a different timezone #8
    • Fix bug at WEEKLY frequency with a partially filled cache in some circumstances
    • Fix various reference bugs causing corruption of the cache in some circumstances (related to DateTime object being mutable)

    Removed

    • The alias RRule::occursOn has been removed (use occursAt instead)
    Open source →
  30. v1.0.1 11 Mar 2016
    Release notes

    Fixed

    • Ensure the results are returned in the same timezone as DTSTART. #6
    • LogicException namespacing bug. #3
    Open source →
  31. v1.0.0 02 Mar 2016
    Release notes

    Added

    • First release, everything before that was unversioned (dev-master was used).
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive