Swift rrule library for working with recurrence rules of calendar dates.
RRuleSwift is based on rrule.js.
Specify "RRuleSwift" in your Cartfile
:
github "teambition/RRuleSwift"
var recurrenceRule = RecurrenceRule(frequency: .daily)
recurrenceRule.calendar = ...
recurrenceRule.frequency = ...
recurrenceRule.interval = ...
recurrenceRule.firstDayOfWeek = ...
recurrenceRule.startDate = ...
recurrenceRule.recurrenceEnd = ...
recurrenceRule.bysetpos = ...
recurrenceRule.byyearday = ...
recurrenceRule.bymonth = ...
recurrenceRule.byweekno = ...
recurrenceRule.bymonthday = ...
recurrenceRule.byweekday = ...
recurrenceRule.byhour = ...
recurrenceRule.byminute = ...
recurrenceRule.bysecond = ...
recurrenceRule.rdate = ...
recurrenceRule.exdate = ...
let ruleString = "RRULE:FREQ=MONTHLY;DTSTART=20160404T021000Z;COUNT=5;INTERVAL=2;WKST=MO;BYDAY=MO,TU"
let rule = RecurrenceRule(rruleString: ruleString)
let ruleString = rule.toRRuleString()
print(ruleString)
// RRULE:FREQ=MONTHLY;DTSTART=20160404T021000Z;COUNT=5;INTERVAL=2;WKST=MO;BYDAY=MO,TU
let rdateString = "RDATE:20180706T160000Z,20210706T160000Z"
if let inclusionDate = InclusionDate(rdateString: rdateString) {
print(inclusionDate.toRDateString())
// RDATE:20180706T160000Z,20210706T160000Z
print(inclusionDate.dates)
/*
2018-07-07 00:00:00 Sun
2021-07-07 00:00:00 Sun
*/
}
let exdateString = "EXDATE:20181231T160000Z,20201231T160000Z"
if let exclusionDate = ExclusionDate(exdateString: exdateString, granularity: .year) {
print(exclusionDate.toExDateString())
// EXDATE:20181231T160000Z,20201231T160000Z
print(exclusionDate.dates)
/*
2019-01-01 00:00:00 Tue
2021-01-01 00:00:00 Fri
*/
}
let ruleString = "RRULE:FREQ=YEARLY;COUNT=11;WKST=MO"
if let rule = RecurrenceRule(rruleString: ruleString) {
var rule = rule
rule.rdate = inclusionDate // RDATE:20180706T160000Z,20210706T160000Z
rule.exdate = exclusionDate // EXDATE:20181231T160000Z,20201231T160000Z
let allDates = rule.allOccurrences()
print(allDates)
/*
2016-04-14 14:22:30 Thu
2017-04-14 14:22:30 Fri
2018-04-14 14:22:30 Sat
2018-07-07 00:00:00 Sat
2020-04-14 14:22:30 Tue
2022-04-14 14:22:30 Thu
2023-04-14 14:22:30 Fri
2024-04-14 14:22:30 Sun
2025-04-14 14:22:30 Mon
2026-04-14 14:22:30 Tue
*/
let date = dateFormatter.date(from: "2018-01-01 00:00:00 Sun")!
let otherDate = dateFormatter.date(from: "2024-01-01 00:00:00 Mon")!
let betweenDates = rule.occurrences(between: date, and: otherDate)
print(betweenDates)
/*
2018-04-14 14:22:30 Sat
2018-07-07 00:00:00 Sat
2020-04-14 14:22:30 Tue
2022-04-14 14:22:30 Thu
2023-04-14 14:22:30 Fri
*/
}
iOS 8.0
RRuleSwift is released under the MIT license. See LICENSE for details.
Have a question? Please open an issue!