Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/julienbreux/rrule-go
Go library for working with recurrence rules for calendar dates.
https://github.com/julienbreux/rrule-go
calendar golang golang-library icalendar-rfc recurrence-rules rrule
Last synced: 29 days ago
JSON representation
Go library for working with recurrence rules for calendar dates.
- Host: GitHub
- URL: https://github.com/julienbreux/rrule-go
- Owner: JulienBreux
- License: mit
- Created: 2017-02-19T14:37:44.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-02-22T17:16:16.000Z (over 7 years ago)
- Last Synced: 2024-10-03T12:52:17.075Z (about 2 months ago)
- Topics: calendar, golang, golang-library, icalendar-rfc, recurrence-rules, rrule
- Language: Go
- Homepage:
- Size: 11.7 KB
- Stars: 26
- Watchers: 2
- Forks: 3
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
rrule.go
========[![Build Status](https://travis-ci.org/JulienBreux/rrule-go.svg?branch=master)](https://travis-ci.org/JulienBreux/rrule-go) [![Coverage Status](https://coveralls.io/repos/github/JulienBreux/rrule-go/badge.svg?branch=master)](https://coveralls.io/github/JulienBreux/rrule-go?branch=master)
**Go library for working with recurrence rules for calendar dates.**
Inspired by the amazing [rrule.js](https://github.com/jkbrzt/rrule).
* * * * *
### Quick Start
#### Installation
The only requirement is the [Go Programming Language](https://golang.org/dl/), at least 1.8
```bash
$ go get github.com/JulienBreux/rrule
```#### Overview
##### RRule
```go
// Create a rule
rule := rrule.RRule{
freq: rrule.WEEKLY,
interval: 5,
byweekday: [rrule.MO, rrule.FR],
dtstart: time.Date(2017, time.January, 1, 10, 30, 0, 0, time.UTC),
until: time.Date(2017, time.December, 31, 10, 30, 0, 0, time.UTC),
}// Get all occurrence dates (Date instances)
rule.All()// Get a slice of occurrence dates (Date instances)
rule.Between(
time.Date(2017, time.August, 1, 10, 30, 0, 0, time.UTC),
time.Date(2017, time.September, 1, 10, 30, 0, 0, time.UTC),
)// Get an iCalendar RRULE string representation:
// The output can be used with RRule.FromString("...").
rule.ToString()
```##### RRuleSet
```go
// Create a rule set
set := rrule.RRuleSet{}// Add a rule to set
set.RRule(
rrule.RRule{
freq: rrule.MONTHLY,
count: 2,
dtstart: time.Date(2017, time.January, 1, 10, 30, 0, 0, time.UTC),
}
)// Add an exclusion rule to set
set.ExRule(
rrule.RRule{
freq: rrule.MONTHLY,
count: 2,
dtstart: time.Date(2017, time.February, 1, 10, 30, 0, 0, time.UTC),
}
)// Add a date to set
set.RDate(time.Date(2017, time.June, 1, 10, 30, 0, 0, time.UTC))// Add an another date to set
set.RDate(time.Date(2017, time.June, 2, 10, 30, 0, 0, time.UTC))// Add an exclusion date to set
set.ExDate(time.Date(2017, time.May, 1, 10, 30, 0, 0, time.UTC))// Get all occurrence dates (Date instances)
set.All()// Get a slice of occurrence dates (Date instances)
set.Between(
time.Date(2017, time.February, 1, 10, 30, 0, 0, time.UTC),
time.Date(2017, time.June, 2, 10, 30, 0, 0, time.UTC),
)// Array of strings (e.g. ["RRULE:...", "RDATE:...", "EXRULE:...", "EXDATE:..."])
set.ValueOf()// To string (array stringified) (e.g. "["RRULE:...", "RDATE:...", "EXRULE:...", "EXDATE:..."]")
set.ToString()
```##### RRule parser
```go
// Parse a RRule string, to a RRule instance
rrule.StrToRule("RRULE:FREQ=MONTHLY;COUNT=5;DTSTART=20170201T023000Z")// Parse a RRule string, to a RRuleSet instance
rrule.StrToRuleSet("RRULE:FREQ=MONTHLY;COUNT=5;DTSTART=20170201T023000Z")// Parse a RRuleSet string, to a RRuleSet instance
rrule.StrToRuleSet(
"RRULE:FREQ=MONTHLY;COUNT=5;DTSTART=20170201T023000Z\n"+
"RDATE:20170701T023000Z,20170702T023000Z\n"+
"EXRULE:FREQ=MONTHLY;COUNT=2;DTSTART=20170301T023000Z\n"+
"EXDATE:20170601T023000Z")
```#### Authors
* [Julien Breux](https://julienbreux.uk/) ([@JulienBreux](http://twitter.com/JulienBreux))