Documentation
¶
Index ¶
- Constants
- Variables
- func StrToDates(str string) (ts []time.Time, err error)
- func StrToDatesInLoc(str string, defaultLoc *time.Location) (ts []time.Time, err error)
- func StrToDtStart(str string, defaultLoc *time.Location) (time.Time, error)
- type Frequency
- type Next
- type ROption
- type RRule
- func (r *RRule) After(dt time.Time, inc bool) time.Time
- func (r *RRule) All() []time.Time
- func (r *RRule) Before(dt time.Time, inc bool) time.Time
- func (r *RRule) Between(after, before time.Time, inc bool) []time.Time
- func (r *RRule) DTStart(dt time.Time)
- func (r *RRule) GetDTStart() time.Time
- func (r *RRule) GetUntil() time.Time
- func (r *RRule) Iterator() Next
- func (r *RRule) String() string
- func (r *RRule) Until(ut time.Time)
- type Set
- func (set *Set) After(dt time.Time, inc bool) time.Time
- func (set *Set) All() []time.Time
- func (set *Set) Before(dt time.Time, inc bool) time.Time
- func (set *Set) Between(after, before time.Time, inc bool) []time.Time
- func (set *Set) DTStart(dtstart time.Time)
- func (set *Set) ExDate(exdate time.Time)
- func (set *Set) GetDTStart() time.Time
- func (set *Set) GetExDate() []time.Time
- func (set *Set) GetRDate() []time.Time
- func (set *Set) GetRRule() *RRule
- func (set *Set) Iterator() (next func() (time.Time, bool))
- func (set *Set) RDate(rdate time.Time)
- func (set *Set) RRule(rrule *RRule)
- func (set *Set) Recurrence() []string
- func (set *Set) SetExDates(exdates []time.Time)
- func (set *Set) SetRDates(rdates []time.Time)
- func (set *Set) String() string
- type Weekday
Examples ¶
Constants ¶
const ( // DateTimeFormat is date-time format used in iCalendar (RFC 5545) DateTimeFormat = "20060102T150405Z" // LocalDateTimeFormat is a date-time format without Z prefix LocalDateTimeFormat = "20060102T150405" // DateFormat is date format used in iCalendar (RFC 5545) DateFormat = "20060102" )
const (
MAXYEAR = 9999
)
MAXYEAR
Variables ¶
var ( M366MASK []int M365MASK []int MDAY366MASK []int MDAY365MASK []int NMDAY366MASK []int NMDAY365MASK []int WDAYMASK []int M366RANGE = []int{0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366} M365RANGE = []int{0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365} )
Every mask is 7 days longer to handle cross-year weekly periods.
var ( MO = Weekday{/* contains filtered or unexported fields */} TU = Weekday{/* contains filtered or unexported fields */} WE = Weekday{/* contains filtered or unexported fields */} TH = Weekday{/* contains filtered or unexported fields */} FR = Weekday{/* contains filtered or unexported fields */} SA = Weekday{/* contains filtered or unexported fields */} SU = Weekday{/* contains filtered or unexported fields */} )
Weekdays
Functions ¶
func StrToDates ¶
StrToDates is intended to parse RDATE and EXDATE properties supporting only VALUE=DATE-TIME (DATE and PERIOD are not supported). Accepts string with format: "VALUE=DATE-TIME;[TZID=...]:{time},{time},...,{time}" or simply "{time},{time},...{time}" and parses it to array of dates In case no time zone specified in str, when all dates are parsed in UTC
func StrToDatesInLoc ¶ added in v1.2.2
StrToDatesInLoc same as StrToDates but it consideres default location to parse dates in in case no location specified with TZID parameter
Types ¶
type Next ¶
Next is a generator of time.Time. It returns false of Ok if there is no value to generate.
type ROption ¶
type ROption struct { Freq Frequency Dtstart time.Time Interval int Wkst Weekday Count int Until time.Time Bysetpos []int Bymonth []int Bymonthday []int Byyearday []int Byweekno []int Byweekday []Weekday Byhour []int Byminute []int Bysecond []int Byeaster []int }
ROption offers options to construct a RRule instance. For performance, it is strongly recommended providing explicit ROption.Dtstart, which defaults to `time.Now().UTC().Truncate(time.Second)`.
func StrToROption ¶
StrToROption converts string to ROption.
func StrToROptionInLocation ¶ added in v1.0.1
StrToROptionInLocation is same as StrToROption but in case local time is supplied as date-time/date field (ex. UNTIL), it is parsed as a time in a given location (time zone)
func (*ROption) RRuleString ¶ added in v1.6.0
RRuleString returns RRULE string exclude DTSTART
type RRule ¶
RRule offers a small, complete, and very fast, implementation of the recurrence rules documented in the iCalendar RFC, including support for caching of results.
Example ¶
// Daily, for 10 occurrences. r, _ := rrule.NewRRule(rrule.ROption{ Freq: rrule.DAILY, Count: 10, Dtstart: time.Date(1997, 9, 2, 9, 0, 0, 0, time.UTC), }) fmt.Println(r.String()) // DTSTART:19970902T090000Z // RRULE:FREQ=DAILY;COUNT=10 printTimeSlice(r.All()) // 1997-09-02 09:00:00 +0000 UTC // 1997-09-03 09:00:00 +0000 UTC // ... // 1997-09-07 09:00:00 +0000 UTC printTimeSlice(r.Between( time.Date(1997, 9, 6, 0, 0, 0, 0, time.UTC), time.Date(1997, 9, 8, 0, 0, 0, 0, time.UTC), true)) // [1997-09-06 09:00:00 +0000 UTC // 1997-09-07 09:00:00 +0000 UTC] // Every four years, the first Tuesday after a Monday in November, 3 occurrences (U.S. Presidential Election day). r, _ = rrule.NewRRule(rrule.ROption{ Freq: rrule.YEARLY, Interval: 4, Count: 3, Bymonth: []int{11}, Byweekday: []rrule.Weekday{rrule.TU}, Bymonthday: []int{2, 3, 4, 5, 6, 7, 8}, Dtstart: time.Date(1996, 11, 5, 9, 0, 0, 0, time.UTC), }) fmt.Println(r.String()) // DTSTART:19961105T090000Z // RRULE:FREQ=YEARLY;INTERVAL=4;COUNT=3;BYMONTH=11;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=TU printTimeSlice(r.All()) // 1996-11-05 09:00:00 +0000 UTC // 2000-11-07 09:00:00 +0000 UTC // 2004-11-02 09:00:00 +0000 UTC
Output: DTSTART:19970902T090000Z RRULE:FREQ=DAILY;COUNT=10 1997-09-02 09:00:00 +0000 UTC 1997-09-03 09:00:00 +0000 UTC 1997-09-04 09:00:00 +0000 UTC 1997-09-05 09:00:00 +0000 UTC 1997-09-06 09:00:00 +0000 UTC 1997-09-07 09:00:00 +0000 UTC 1997-09-08 09:00:00 +0000 UTC 1997-09-09 09:00:00 +0000 UTC 1997-09-10 09:00:00 +0000 UTC 1997-09-11 09:00:00 +0000 UTC 1997-09-06 09:00:00 +0000 UTC 1997-09-07 09:00:00 +0000 UTC DTSTART:19961105T090000Z RRULE:FREQ=YEARLY;INTERVAL=4;COUNT=3;BYMONTH=11;BYMONTHDAY=2,3,4,5,6,7,8;BYDAY=TU 1996-11-05 09:00:00 +0000 UTC 2000-11-07 09:00:00 +0000 UTC 2004-11-02 09:00:00 +0000 UTC
func StrToRRule ¶
StrToRRule converts string to RRule
Example ¶
// Compatible with old DTSTART r, _ := rrule.StrToRRule("FREQ=DAILY;DTSTART=20060101T150405Z;COUNT=5") fmt.Println(r.OrigOptions.RRuleString()) // FREQ=DAILY;COUNT=5 fmt.Println(r.OrigOptions.String()) // DTSTART:20060101T150405Z // RRULE:FREQ=DAILY;COUNT=5 fmt.Println(r.String()) // DTSTART:20060101T150405Z // RRULE:FREQ=DAILY;COUNT=5 printTimeSlice(r.All()) // 2006-01-01 15:04:05 +0000 UTC // 2006-01-02 15:04:05 +0000 UTC // 2006-01-03 15:04:05 +0000 UTC // 2006-01-04 15:04:05 +0000 UTC // 2006-01-05 15:04:05 +0000 UTC
Output: FREQ=DAILY;COUNT=5 DTSTART:20060101T150405Z RRULE:FREQ=DAILY;COUNT=5 DTSTART:20060101T150405Z RRULE:FREQ=DAILY;COUNT=5 2006-01-01 15:04:05 +0000 UTC 2006-01-02 15:04:05 +0000 UTC 2006-01-03 15:04:05 +0000 UTC 2006-01-04 15:04:05 +0000 UTC 2006-01-05 15:04:05 +0000 UTC
func (*RRule) After ¶
After returns the first recurrence after the given datetime instance, or time.Time's zero value if no recurrence match. The inc keyword defines what happens if dt is an occurrence. With inc == True, if dt itself is an occurrence, it will be returned. It is only supported second precision.
func (*RRule) All ¶
All returns all occurrences of the RRule. It is only supported second precision.
func (*RRule) Before ¶
Before returns the last recurrence before the given datetime instance, or time.Time's zero value if no recurrence match. The inc keyword defines what happens if dt is an occurrence. With inc == True, if dt itself is an occurrence, it will be returned. It is only supported second precision.
func (*RRule) Between ¶
Between returns all the occurrences of the RRule between after and before. The inc keyword defines what happens if after and/or before are themselves occurrences. With inc == True, they will be included in the list, if they are found in the recurrence set. It is only supported second precision.
func (*RRule) DTStart ¶ added in v1.2.4
DTStart set a new DTSTART for the rule and recalculates the timeset if needed. It will be truncated to second precision. Default to `time.Now().UTC().Truncate(time.Second)`.
func (*RRule) GetDTStart ¶ added in v1.7.0
GetDTStart gets DTSTART time for rrule
type Set ¶
type Set struct {
// contains filtered or unexported fields
}
Set allows more complex recurrence setups, mixing multiple rules, dates, exclusion rules, and exclusion dates
Example ¶
// Daily, for 7 days, jumping Saturday and Sunday occurrences. set := rrule.Set{} r, _ := rrule.NewRRule(rrule.ROption{ Freq: rrule.DAILY, Count: 7, Dtstart: time.Date(1997, 9, 2, 9, 0, 0, 0, time.UTC)}) set.RRule(r) fmt.Println(set.String()) // DTSTART:19970902T090000Z // RRULE:FREQ=DAILY;COUNT=7 printTimeSlice(set.All()) // 1997-09-02 09:00:00 +0000 UTC // 1997-09-03 09:00:00 +0000 UTC // 1997-09-04 09:00:00 +0000 UTC // 1997-09-05 09:00:00 +0000 UTC // 1997-09-06 09:00:00 +0000 UTC // 1997-09-07 09:00:00 +0000 UTC // 1997-09-08 09:00:00 +0000 UTC // Weekly, for 4 weeks, plus one time on day 7, and not on day 16. set = rrule.Set{} r, _ = rrule.NewRRule(rrule.ROption{ Freq: rrule.WEEKLY, Count: 4, Dtstart: time.Date(1997, 9, 2, 9, 0, 0, 0, time.UTC)}) set.RRule(r) set.RDate(time.Date(1997, 9, 7, 9, 0, 0, 0, time.UTC)) set.ExDate(time.Date(1997, 9, 16, 9, 0, 0, 0, time.UTC)) fmt.Println(set.String()) // DTSTART:19970902T090000Z // RRULE:FREQ=WEEKLY;COUNT=4 // RDATE:19970907T090000Z // EXDATE:19970916T090000Z printTimeSlice(set.All()) // 1997-09-02 09:00:00 +0000 UTC // 1997-09-07 09:00:00 +0000 UTC // 1997-09-09 09:00:00 +0000 UTC // 1997-09-23 09:00:00 +0000 UTC
Output: DTSTART:19970902T090000Z RRULE:FREQ=DAILY;COUNT=7 1997-09-02 09:00:00 +0000 UTC 1997-09-03 09:00:00 +0000 UTC 1997-09-04 09:00:00 +0000 UTC 1997-09-05 09:00:00 +0000 UTC 1997-09-06 09:00:00 +0000 UTC 1997-09-07 09:00:00 +0000 UTC 1997-09-08 09:00:00 +0000 UTC DTSTART:19970902T090000Z RRULE:FREQ=WEEKLY;COUNT=4 RDATE:19970907T090000Z EXDATE:19970916T090000Z 1997-09-02 09:00:00 +0000 UTC 1997-09-07 09:00:00 +0000 UTC 1997-09-09 09:00:00 +0000 UTC 1997-09-23 09:00:00 +0000 UTC
func StrSliceToRRuleSet ¶
StrSliceToRRuleSet converts given str slice to RRuleSet In case there is a time met in any rule without specified time zone, when it is parsed in UTC (see StrSliceToRRuleSetInLoc)
func StrSliceToRRuleSetInLoc ¶ added in v1.2.2
StrSliceToRRuleSetInLoc is same as StrSliceToRRuleSet, but by default parses local times in specified default location
func StrToRRuleSet ¶
StrToRRuleSet converts string to RRuleSet
Example ¶
s, _ := rrule.StrToRRuleSet("DTSTART:20060101T150405Z\nRRULE:FREQ=DAILY;COUNT=5\nEXDATE:20060102T150405Z") fmt.Println(s.String()) // DTSTART:20060101T150405Z // RRULE:FREQ=DAILY;COUNT=5 // EXDATE:20060102T150405Z printTimeSlice(s.All()) // 2006-01-01 15:04:05 +0000 UTC // 2006-01-03 15:04:05 +0000 UTC // 2006-01-04 15:04:05 +0000 UTC // 2006-01-05 15:04:05 +0000 UTC
Output: DTSTART:20060101T150405Z RRULE:FREQ=DAILY;COUNT=5 EXDATE:20060102T150405Z 2006-01-01 15:04:05 +0000 UTC 2006-01-03 15:04:05 +0000 UTC 2006-01-04 15:04:05 +0000 UTC 2006-01-05 15:04:05 +0000 UTC
func (*Set) After ¶
After returns the first recurrence after the given datetime instance, or time.Time's zero value if no recurrence match. The inc keyword defines what happens if dt is an occurrence. With inc == True, if dt itself is an occurrence, it will be returned. It is only supported second precision.
func (*Set) All ¶
All returns all occurrences of the rrule.Set. It is only supported second precision.
func (*Set) Before ¶
Before Returns the last recurrence before the given datetime instance, or time.Time's zero value if no recurrence match. The inc keyword defines what happens if dt is an occurrence. With inc == True, if dt itself is an occurrence, it will be returned. It is only supported second precision.
func (*Set) Between ¶
Between returns all the occurrences of the rrule between after and before. The inc keyword defines what happens if after and/or before are themselves occurrences. With inc == True, they will be included in the list, if they are found in the recurrence set. It is only supported second precision.
func (*Set) DTStart ¶ added in v1.2.0
DTStart sets dtstart property for set. It will be truncated to second precision.
func (*Set) ExDate ¶
ExDate include the given datetime instance in the recurrence set exclusion list. Dates included that way will not be generated, even if some inclusive rrule or rdate matches them. It will be truncated to second precision.
func (*Set) GetDTStart ¶ added in v1.2.0
GetDTStart gets DTSTART for set
func (*Set) RDate ¶
RDate include the given datetime instance in the recurrence set generation. It will be truncated to second precision.
func (*Set) RRule ¶
RRule set the RRULE for set. There is the only one RRULE in the set as https://tools.ietf.org/html/rfc5545#appendix-A.1
func (*Set) Recurrence ¶
Recurrence returns a slice of all the recurrence rules for a set
func (*Set) SetExDates ¶ added in v1.5.0
SetExDates sets explicitly excluded dates (exdates) in the set. It will be truncated to second precision.
type Weekday ¶
type Weekday struct {
// contains filtered or unexported fields
}
Weekday specifying the nth weekday. Field N could be positive or negative (like MO(+2) or MO(-3). Not specifying N (0) is the same as specifying +1.