This library augments the Go time package to provide easy handling of holidays and work days (business days).
Holiday instances are calculated from either builtin or user-created functions to support exact days, floating days such as the 3rd Monday of the month, yearly offsets such as the 100th day of the year, or more complex rules such as offsets from Easter. Holidays may provide separate actual and observed dates for cases where holidays are celebrated on an alternate day if they fall on a specific day of the week (usually weekends).
The Calendar type provides the basic functionality for creating a yearly calendar with holidays.
BusinessCalendar adds additional functionality for calculating workdays and hours worked.
For v2, much of the functionality of this library was rewritten to address shortcomings of the v1 releases. This version provides the following benefits over v1:
- Holidays
- Observation rules are tied to individual holidays rather than a per-calendar setting
- Name, description, and observance type fields added
- Starting, ending, and exception year options
- Holiday definitions are separated into subpackages by ISO code (no longer necessary to bundle all holidays in the final binary)
- Calendar
- Separation of business specific functionality into BusinessCalendar
- Name and description fields added
- Support for time.Location matching to ease use of multiple Calendars
- BusinessCalendar
- Full support for working hours and related calculations
- Work days and work start and end times can be provided by custom functions