meetingtime: A Schedule Calculator for Go
If you're working on a Go (golang) project that deals with regular events, you'll no doubt find yourself having to calculate upcoming dates given a less than straightforward brief, such as "the first and third Monday of each month". meetingtime makes this a bit easier, taking simple structs describing your schedule, and providing the date and time for upcoming or past meetings.
Installation
To get the latest version of meetingtime:
go get -u github.com/theothertomelliott/meetingtime
Basic Usage
Start by defining a Schedule:
// Create a Schedule for a meeting that occurs every other month on the 10th at 6pm
schedule := meetingtime.NewMonthlySchedule(time.Date(2016, time.January, 10, 18, 0, 0, 0, time.UTC), 2)
Then query the Schedule to obtain the date of the next meeting as a time.Time value:
// Get the next meeting after the current time
nextMeeting, err := schedule.Next(time.Now())
Schedule Types
meetingtime provides a variety of schedule types:
- Daily
- Weekly
- Monthly
- Monthly by Weekday
- Yearly
Daily, Weekly, Monthly and Yearly schedules accept a frequency value, to allow for schedules such as "every other Monday". The Monthly by Weekday type permits schedules like "the second Tuesday of each month", this type does not take a frequency, and any frequency value will be ignored.
Complex schedules
More complicated schedules can be represented by combinations of Schedule values using the ScheduleSlice type.
// Create a ScheduleSlice for a meeting on the 1st and 3rd Monday of each month at 7pm
schedule := ScheduleSlice{
NewMonthlyScheduleByWeekday(time.Date(2016, time.September, 5, 19, 0, 0, 0, time.UTC)),
NewMonthlyScheduleByWeekday(time.Date(2016, time.September, 19, 19, 0, 0, 0, time.UTC)),
}
// Get the first meeting in October
firstInOct, err := schedule.Next(time.Date(2016, time.October, 1, 0, 0, 0, 0, time.UTC))
Describing a Schedule
The describe package provides a function (describe.Schedule) for creating English descriptions for meetingtime.Schedule values.
See the describe godoc for more details.
describe does not currently have i18n support.
Having Trouble?
If you're having trouble with meetingtime, please raise a GitHub issue and we'll do what we can to help, or make fixes as needed.
Contributing
Contributions are always more than welcome, feel free to pick up an issue and/or send a PR. Alternatively, just raise an issue with your idea for improvements.
License
meetingtime is provided under the MIT License.