Giter Site home page Giter Site logo

rrule.swift's Introduction

rrule.swift

rrule.swift supports recurrence rules in Swift 4 (No other 3rd-party dependencies).

It is a partial port of the rrule module from the excellent python-dateutil library.

Demo

demo

How to use

Drag rrule.swift into your project.

let rule = rule(frequency, dtstart: dtstart, until: until, count: count, interval: interval, wkst: wkst, bysetpos: bysetpos, bymonth: bymonth, bymonthday: bymonthday, byyearday: byyearday, byweekno: byweekno, byweekday: byweekday)
let occurrences = rule.getOccurrences()

To do

  • Hourly
  • Minutely
  • Secondly

Author

sdq

License

MIT

rrule.swift's People

Contributors

sdq avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

rrule.swift's Issues

Weekly doesn't seem to be working

It appears weekly is working like daily. If I provided a start date 1/1/2020 and end date 2/1/2020 and select weekly it spits out every day in between. I would have assumed it would spit out 1/1, 1/8/, 1/15 etc. Is there something I am doing wrong?

Init from String?

Thanks for a great lib! Are there any plans to initialize a rule from string like "RRULE:FREQ=MONTHLY;DTSTART=20160404T021000Z;COUNT=5;INTERVAL=2;WKST=MO;BYDAY=MO,TU" ?

I used https://github.com/teambition/RRuleSwift, but unfortunately it uses JS bridging and not thread safe. This lib looks much better

Wrong Daily reccurrence generating between

the repeating is daily count 5 from 24.06.2019 and last instance is on 28.06.2019
but the result of rule.getOccurrencesBetween return 5 occurrences from 28.06.2019

func customRuleGenerator() {
        let appointentStart = "24.06.2019"
        
        let windowStart = "28.06.2019"
        let windowEnd = "28.09.2019"
        
        let dateFormatter = DateFormatter()
        dateFormatter.dateFormat = "dd.MM.yyyy"
        
        let rule = getRule(for: dateFormatter.date(from: appointentStart)!)
        let occurrences = rule.getOccurrencesBetween(beginDate: dateFormatter.date(from: windowStart)!, endDate: dateFormatter.date(from: windowEnd)!)
        
        print(occurrences)
        
    }
    
    func getRule( for start: Date) -> rrule {
        //frequency
        let rrulefrequency: RruleFrequency = .daily
        
        //dtstart
        let rruledtstart = start
        
        //until
        let rruleuntil: Date? = nil
        
        //count
        var rrulecount: Int? = 5

        //interval
        var rruleinterval: Int = 1

        //wkst
        let rrulewkst = 1 //TODO: implement week start
        
        //byweekday
        let rrulebyweekday: [Int] = []
        
        //byweekno
        let rrulebyweekno: [Int] = []
        
        //bymonth
        let rrulebymonth: [Int] = []
        
        //bymonthday
        let rrulebymonthday: [Int] = [] // if monthly and there is no weekDays
        
        //byyearday
        let rrulebyyearday: [Int] = []
        
        //bysetpos
        let rrulebysetpos: [Int] = []
        
        let rule = rrule(frequency: rrulefrequency, dtstart: rruledtstart, until: rruleuntil, count: rrulecount, interval: rruleinterval, wkst: rrulewkst, bysetpos: rrulebysetpos, bymonth: rrulebymonth, bymonthday: rrulebymonthday, byyearday: rrulebyyearday, byweekno: rrulebyweekno, byweekday: rrulebyweekday, byhour: [], byminute: [], bysecond: [])
        
        return rule
    }

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.