cal

package module
v1.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 17, 2020 License: BSD-3-Clause Imports: 2 Imported by: 8

README

cal: Go (golang) calendar library for dealing with holidays and work days

This library augments the Go time package to provide easy handling of holidays and work days (business days).

Holiday instances can be exact days, floating days such as the 3rd Monday of the month, yearly offsets such as the 100th day of the year, or the result of custom function executions for complex rules.

The Calendar type provides functions for calculating workdays and dealing with holidays that are observed on alternate days when they fall on weekends.

Here is a simple usage example of a cron job that runs once per day:

package main

import (
	"time"

	"github.com/rickar/cal"
)

func main() {
	c := cal.NewCalendar()

	// add holidays for the business
	c.AddHoliday(
		cal.USIndependence,
		cal.USThanksgiving,
		cal.USChristmas,
	)

	// optionally change the default of a Mon - Fri work week
	c.SetWorkday(time.Saturday, true)

	// optionally change the holiday calculation behavior
	// (the default is US-style where weekend holidays are
	// observed on the closest weekday)
	c.Observed = cal.ObservedExact

	t := time.Now()

	// run different batch processing jobs based on the day

	if c.IsWorkday(t) {
		// create daily activity reports
	}

	if cal.IsWeekend(t) {
		// validate employee time submissions
	}

	if c.WorkdaysRemain(t) == 10 {
		// 10 business days before the end of month
		// send account statements to customers
	}

	if c.WorkdaysRemain(t) == 0 {
		// last business day of the month
		// execute auto billing transfers
	}
}

Documentation

Overview

Package cal provides extensions to the time package for handling holidays and work days (business days).

Work days are defined as Monday through Friday on dates that are not holidays or the alternate observation dates for holidays.

As in the time package, all calculations assume a Gregorian calendar.

Index

Constants

This section is empty.

Variables

View Source
var (
	NewYear      = NewHoliday(time.January, 1)
	GoodFriday   = NewHolidayFunc(calculateGoodFriday)
	EasterMonday = NewHolidayFunc(calculateEasterMonday)
	Christmas    = NewHoliday(time.December, 25)
	Christmas2   = NewHoliday(time.December, 26)
)

Common holidays

View Source
var (
	ATNeujahr            = NewYear
	ATHeiligeDreiKoenige = NewHoliday(time.January, 6)
	ATOstermontag        = EasterMonday
	ATTagderArbeit       = NewHoliday(time.May, 1)
	ATChristiHimmelfahrt = NewHolidayFunc(calculateHimmelfahrt)
	ATPfingstmontag      = NewHolidayFunc(calculatePfingstMontag)
	ATFronleichnam       = NewHolidayFunc(calculateFronleichnam)
	ATMariaHimmelfahrt   = NewHoliday(time.August, 15)
	ATNationalfeiertag   = NewHoliday(time.October, 26)
	ATAllerheiligen      = NewHoliday(time.November, 1)
	ATMariaEmpfaengnis   = NewHoliday(time.December, 8)
	ATChristtag          = Christmas
	ATStefanitag         = Christmas2
)

Holidays in Austria

View Source
var (
	AUNewYear       = NewHolidayFunc(calculateNewYearOceania)
	AUAustralianDay = NewHoliday(time.January, 26)
	AUGoodFriday    = GoodFriday
	AUChristmasDay  = NewHolidayFunc(calculateOcenaniaChristmasDay)
	AUBoxingDays    = Christmas2
	AUEasterMonday  = EasterMonday
	AUAnzacDay      = NewHolidayFunc(calculateAnzacDay)
	AUQueenBirthDay = NewHolidayFunc(calculateQueenBirthDay)
	AULabourDay     = NewHolidayFunc(calculateAULabourDay)
)

Holidays in Australia

View Source
var (
	BENieuwjaar                = NewYear
	BEPaasmaandag              = EasterMonday
	BEDagVanDeArbeid           = ECBLabourDay
	BEOnzeLieveHeerHemelvaart  = NewHolidayFunc(calculateOnzeLieveHeerHemelvaart)
	BEPinkstermaandag          = NewHolidayFunc(calculatePinkstermaandag)
	BENationaleFeestdag        = NewHoliday(time.July, 21)
	BEOnzeLieveVrouwHemelvaart = NewHoliday(time.August, 15)
	BEAllerheiligen            = NewHoliday(time.November, 1)
	BEWapenstilstand           = NewHoliday(time.November, 11)
	BEKerstmis                 = Christmas
)

Holidays in Belgium

View Source
var (
	CANewYear        = NewYear
	CAFamilyDay      = NewHolidayFloat(time.February, time.Monday, 3)
	CAGoodFriday     = GoodFriday
	CAVictoriaDay    = NewHolidayFloat(time.May, time.Monday, 3)
	CACanadaDay      = NewHoliday(time.July, 1)
	CACivicHoliday   = NewHolidayFloat(time.August, time.Monday, 1)
	CALabourDay      = NewHolidayFloat(time.September, time.Monday, 1)
	CAThanksgiving   = NewHolidayFloat(time.October, time.Monday, 2)
	CARemembranceDay = NewHoliday(time.November, 11)
	CAChristmasDay   = Christmas
	CABoxingDay      = Christmas2
)

Canadian holidays

View Source
var (
	CZNewYear        = NewYear
	CZGoodFriday     = GoodFriday
	CZEasterMonday   = EasterMonday
	CZLabor          = NewHoliday(time.May, 1)
	CZLiberation     = NewHoliday(time.May, 8)
	CZSaintsCyril    = NewHoliday(time.July, 5)
	CZJanHus         = NewHoliday(time.July, 6)
	CZSaintWenceslas = NewHoliday(time.September, 28)
	CZFoundationCZSK = NewHoliday(time.October, 28)
	CZFreedom        = NewHoliday(time.November, 17)
	CZChristmasEve   = NewHoliday(time.December, 24)
	CZChristmas      = Christmas
	CZSaintStephen   = Christmas2
)

Czech holidays

View Source
var (
	DENeujahr                  = NewYear
	DEHeiligeDreiKoenige       = NewHoliday(time.January, 6)
	DEInternationalerFrauentag = NewHoliday(time.March, 8)
	DEKarFreitag               = GoodFriday
	DEOstersonntag             = NewHolidayFunc(calculateOstersonntag)
	DEOstermontag              = EasterMonday
	DETagderArbeit             = NewHoliday(time.May, 1)
	DEChristiHimmelfahrt       = NewHolidayFunc(calculateHimmelfahrt)
	DEPfingstsonntag           = NewHolidayFunc(calculatePfingstSonntag)
	DEPfingstmontag            = NewHolidayFunc(calculatePfingstMontag)
	DEFronleichnam             = NewHolidayFunc(calculateFronleichnam)
	DEMariaHimmelfahrt         = NewHoliday(time.August, 15)
	DEWeltkindertag            = NewHoliday(time.September, 20)
	DETagderDeutschenEinheit   = NewHoliday(time.October, 3)
	DEReformationstag          = NewHoliday(time.October, 31)
	DEReformationstag2017      = NewHolidayExact(time.October, 31, 2017)
	DEAllerheiligen            = NewHoliday(time.November, 1)
	DEBußUndBettag             = NewHolidayFunc(calculateBußUndBettag)
	DEErsterWeihnachtstag      = Christmas
	DEZweiterWeihnachtstag     = Christmas2
)

Holidays in Germany

View Source
var (
	DKNytaarsdag           = NewYear
	DKSkaertorsdag         = NewHolidayFunc(calculateSkaertorsdag)
	DKLangfredag           = GoodFriday
	DKPaaskedag            = NewHolidayFunc(calculatePaaskedag)
	DKAndenPaaskedag       = EasterMonday
	DKStoreBededag         = NewHolidayFunc(calculateStoreBededag)
	DKKristiHimmelfartsdag = NewHolidayFunc(calculateKristiHimmelfartsdag)
	DKPinsedag             = NewHolidayFunc(calculatePinsedag)
	DKAndenPinsedag        = NewHolidayFunc(calculateAndenPinsedag)
	DKGrundlovsdag         = NewHoliday(time.June, 5)
	DKJuleaften            = NewHoliday(time.December, 24)
	DKJuledag              = Christmas
	DKAndenJuledag         = Christmas2
	DKNytaarsaften         = NewHoliday(time.December, 31)
)

Holidays (official and traditional) in Denmark Reference https://da.wikipedia.org/wiki/Helligdag#Danske_helligdage

View Source
var (
	ECBGoodFriday       = GoodFriday
	ECBEasterMonday     = EasterMonday
	ECBNewYearsDay      = NewYear
	ECBLabourDay        = NewHoliday(time.May, 1)
	ECBChristmasDay     = Christmas
	ECBChristmasHoliday = Christmas2
)

European Central Bank Target2 holidays

View Source
var (
	ESAñoNuevo               = NewYear
	ESReyes                  = NewHoliday(time.January, 6)
	ESFiestaDelTrabajo       = NewHoliday(time.May, 1)
	ESAsuncionDeLaVirgen     = NewHoliday(time.August, 15)
	ESFiestaNacionalDeEspaña = NewHoliday(time.October, 12)
	ESTodosLosSantos         = NewHoliday(time.November, 1)
	ESConstitucion           = NewHoliday(time.December, 6)
	ESInmaculadaConcepcion   = NewHoliday(time.December, 8)
	ESNavidad                = Christmas
)

Holidays in Spain

View Source
var (
	FRNouvelAn          = NewYear
	FRLundiDePâques     = EasterMonday
	FRFêteDuTravail     = ECBLabourDay
	FRArmistice1945     = NewHoliday(time.May, 8)
	FRJeudiDeLAscension = NewHolidayFunc(calculateJeudiDeLAscension)
	FRLundiDePentecôte  = NewHolidayFunc(calculateLundiDePentecôte)
	FRFêteNationale     = NewHoliday(time.July, 14)
	FRAssomption        = NewHoliday(time.August, 15)
	FRToussaint         = NewHoliday(time.November, 1)
	FRArmistice1918     = NewHoliday(time.November, 11)
	FRNoël              = Christmas
)

Holidays in France

View Source
var (
	GBNewYear       = NewHolidayFunc(calculateNewYearsHoliday)
	GBGoodFriday    = GoodFriday
	GBEasterMonday  = EasterMonday
	GBEarlyMay      = makeGBEarlyMay()
	GBSpringHoliday = NewHolidayFloat(time.May, time.Monday, -1)
	GBSummerHoliday = NewHolidayFloat(time.August, time.Monday, -1)
	GBChristmasDay  = Christmas
	GBBoxingDay     = Christmas2
)

British holidays

View Source
var (
	ITCapodanno             = NewYear
	ITEpifania              = NewHoliday(time.January, 6)
	ITPasquetta             = EasterMonday
	ITFestaDellaLiberazione = NewHoliday(time.April, 25)
	ITFestaDelLavoro        = NewHoliday(time.May, 1)
	ITFestaDellaRepubblica  = NewHoliday(time.June, 2)
	ITFerragosto            = NewHoliday(time.August, 15)
	ITTuttiISanti           = NewHoliday(time.November, 1)
	ITImmacolata            = NewHoliday(time.December, 8)
	ITNatale                = Christmas
	ITSantoStefano          = Christmas2
)

Italian holidays

View Source
var (
	NLNieuwjaar       = NewYear
	NLGoedeVrijdag    = GoodFriday
	NLPaasMaandag     = EasterMonday
	NLKoningsDag      = NewHolidayFunc(calculateKoningsDag)
	NLBevrijdingsDag  = NewHoliday(time.May, 5)
	NLHemelvaart      = DEChristiHimmelfahrt
	NLPinksterMaandag = DEPfingstmontag
	NLEersteKerstdag  = Christmas
	NLTweedeKerstdag  = Christmas2
)

Holidays in the Netherlands

View Source
var (
	NOFoersteNyttaarsdag   = NewYear
	NOSkjaertorsdag        = NewHolidayFunc(calculateSkaertorsdag)
	NOLangfredag           = GoodFriday
	NOFoerstePaaskedag     = NewHolidayFunc(calculatePaskdagen)
	NOAndrePaaskedag       = EasterMonday
	NOArbeiderenesdag      = NewHoliday(time.May, 1)
	NOGrunnlovsdag         = NewHoliday(time.May, 17)
	NOKristihimmelfartsdag = NewHolidayFunc(calculateKristiHimmelfardsdag)
	NOFoerstePinsedag      = NewHolidayFunc(calculatePingstdagen)
	NOAndrePinsedag        = NewHolidayFunc(calculateAndenPinsedag)
	NOFoersteJuledag       = Christmas
	NOAndreJuledag         = Christmas2
	// Half days
	NOJulaften      = NewHoliday(time.December, 24)
	NONyttaarsaften = NewHoliday(time.December, 31)
)

Holidays in Norway Reference https://no.wikipedia.org/wiki/Helligdager_i_Norge

View Source
var (
	NZNewYear         = NewHolidayFunc(calculateNewYearOceania)
	NZGoodFriday      = GoodFriday
	NZChristmasDay    = NewHolidayFunc(calculateOcenaniaChristmasDay)
	NZBoxingDays      = NewHolidayFunc(calculateOcenaniaBoxingDay)
	NZEasterMonday    = EasterMonday
	NZAnzacDay        = NewHolidayFunc(calculateNZAnzacDay)
	NZQueensBirthday  = NewHolidayFunc(calculateQueensBirthday)
	NZLabourDay       = NewHolidayFunc(calculateLabourDay)
	NZDayAfterNewYear = NewHolidayFunc(calculateDayAfterNewYear)
	NZWanagiDay       = NewHolidayFunc(calculateWarangiDay)
)

Holidays in Australia

View Source
var (
	PLNewYear                     = NewYear
	PLThreeKings                  = NewHoliday(time.January, 6)
	PLEasterMonday                = EasterMonday
	PLEasterSunday                = NewHolidayFunc(calculateEasterSunday)
	PLLabourDay                   = NewHoliday(time.May, 1)
	PLNationalDay                 = NewHoliday(time.May, 3)
	PLPentecostDay                = NewHolidayFunc(calculatePentecostDay)
	PLCorpusChristi               = NewHolidayFunc(calculateCorpusChristiDay)
	PLAssumptionBlessedVirginMary = NewHoliday(time.August, 15)
	PLAllSaints                   = NewHoliday(time.November, 1)
	PLNationalIndependenceDay     = NewHoliday(time.November, 11)
	PLChristmasDayOne             = Christmas
	PLChristmasDayTwo             = Christmas2
)

Poland holidays

View Source
var (
	SENyarsdagen           = NewYear
	SETrettondedagJul      = NewHoliday(time.January, 6)
	SELangfredagen         = GoodFriday
	SEPaskdagen            = NewHolidayFunc(calculatePaskdagen)
	SEAnnandagPask         = EasterMonday
	SEForstaMaj            = NewHoliday(time.May, 1)
	SEKristiHimmelfardsdag = NewHolidayFunc(calculateKristiHimmelfardsdag)
	SEPingstdagen          = NewHolidayFunc(calculatePingstdagen)
	SENationaldagen        = NewHoliday(time.June, 6)
	SEMidsommarafton       = NewHolidayFunc(calculateMidsommarafton)
	SEMidsommardagen       = NewHolidayFunc(calculateMidsommardagen)
	SEAllaHelgonsDag       = NewHolidayFunc(calculateAllaHelgonsDag)
	SEJulafton             = NewHoliday(time.December, 24)
	SEJuldagen             = Christmas
	SEAnnandagJul          = Christmas2
	SENewYearsEve          = NewHoliday(time.December, 31)
)

Holidays in Sweden Reference https://sv.wikipedia.org/wiki/Helgdagar_i_Sverige Days with the [2] notation, meaning days with reduced working hours haven't been added, as this is not regulated by law.

View Source
var (
	SKNewYear       = NewYear
	SKEpiphany      = NewHoliday(time.January, 6)
	SKGoodFriday    = GoodFriday
	SKEasterMonday  = EasterMonday
	SKLabor         = NewHoliday(time.May, 1)
	SKLiberation    = NewHoliday(time.May, 8)
	SKSaintsCyril   = NewHoliday(time.July, 5)
	SKSNP           = NewHoliday(time.August, 29)
	SKConstitution  = NewHoliday(time.September, 1)
	SKLadyOfSorrows = NewHoliday(time.September, 15)
	SKAllSaints     = NewHoliday(time.November, 1)
	SKFreedom       = NewHoliday(time.November, 17)
	SKChristmasEve  = NewHoliday(time.December, 24)
	SKChristmas     = Christmas
	SKSaintStephen  = Christmas2
)

Slovak holidays

View Source
var (
	USNewYear      = NewYear
	USMLK          = NewHolidayFloat(time.January, time.Monday, 3)
	USPresidents   = NewHolidayFloat(time.February, time.Monday, 3)
	USMemorial     = NewHolidayFloat(time.May, time.Monday, -1)
	USIndependence = NewHoliday(time.July, 4)
	USLabor        = NewHolidayFloat(time.September, time.Monday, 1)
	USColumbus     = NewHolidayFloat(time.October, time.Monday, 2)
	USVeterans     = NewHoliday(time.November, 11)
	USThanksgiving = NewHolidayFloat(time.November, time.Thursday, 4)
	USChristmas    = Christmas
)

US holidays

View Source
var (
	ZANewYear             = NewYear
	ZAHumanRights         = NewHoliday(time.March, 21)
	ZAGoodFriday          = GoodFriday
	ZAEasterMonday        = NewHolidayFunc(calculateEasterMonday)
	ZAFreedom             = NewHoliday(time.April, 27)
	ZAWorkers             = NewHoliday(time.May, 1)
	ZAYouth               = NewHoliday(time.June, 16)
	ZANationalWomens      = NewHoliday(time.August, 9)
	ZAHeritage            = NewHoliday(time.September, 24)
	ZADayOfReconciliation = NewHoliday(time.December, 16)
	ZAChristmas           = Christmas
	ZADayOfGoodwill       = Christmas2
)

Holidays in South Africa Reference https://en.wikipedia.org/wiki/Public_holidays_in_South_Africa

Functions

func AddAustralianHolidays

func AddAustralianHolidays(c *Calendar)

AddAustralianHolidays adds all Australian holidays

func AddAustrianHolidays added in v1.0.2

func AddAustrianHolidays(c *Calendar)

AddAustrianHolidays adds all Austrian holidays to the Calendar

func AddBelgiumHolidays

func AddBelgiumHolidays(c *Calendar)

AddBelgiumHolidays adds all Belgium holidays to the Calendar

func AddBritishHolidays

func AddBritishHolidays(c *Calendar)

AddBritishHolidays adds all British holidays to the Calender

func AddCanadianHolidays added in v1.0.2

func AddCanadianHolidays(c *Calendar)

AddCanadianHolidays adds all Canadian holidays to the Calender

func AddCzechHolidays added in v1.0.4

func AddCzechHolidays(c *Calendar)

AddCzechHolidays adds all Czech holidays to the Calendar

func AddDanishHolidays

func AddDanishHolidays(c *Calendar)

AddDanishHolidays adds all Danish holidays to the Calendar

func AddDanishTraditions

func AddDanishTraditions(c *Calendar)

AddDanishTraditions adds Grundlovsdag (Constitution Day), Christmas Eve, and New Years Eve which are not official holidays.

func AddDutchHolidays

func AddDutchHolidays(c *Calendar)

AddDutchHolidays adds all Dutch holidays to the Calendar

func AddEcbHolidays

func AddEcbHolidays(c *Calendar)

AddEcbHolidays adds all ECB Target2 holidays to the calendar

func AddFranceHolidays

func AddFranceHolidays(c *Calendar)

AddFranceHolidays adds all France holidays to the Calendar

func AddGermanHolidays

func AddGermanHolidays(c *Calendar)

AddGermanHolidays adds all German holidays to the Calendar

func AddGermanyStateHolidays

func AddGermanyStateHolidays(c *Calendar, state string)

AddGermanyStateHolidays adds german state holidays to the calendar

func AddItalianHolidays added in v1.0.2

func AddItalianHolidays(c *Calendar)

AddItalianHolidays adds all Italian holidays to the Calendar

func AddNewZealandHoliday

func AddNewZealandHoliday(c *Calendar)

AddNewZealandHoliday adds all New Zeland holidays

func AddNorwegianHalfDays

func AddNorwegianHalfDays(c *Calendar)

AddNorwegianHalfDays are note holidays, but often practiced as a half-business day.

func AddNorwegianHolidays

func AddNorwegianHolidays(c *Calendar)

AddNorwegianHolidays adds all Norwegian holidays to Calendar

func AddPolandHolidays added in v1.0.2

func AddPolandHolidays(c *Calendar)

AddPolandHolidays adds all Poland holidays to the Calendar

func AddSlovakHolidays added in v1.0.4

func AddSlovakHolidays(c *Calendar)

AddSlovakHolidays adds all Slovak holidays to the Calendar

func AddSouthAfricanHolidays added in v1.0.4

func AddSouthAfricanHolidays(cal *Calendar)

AddSouthAfricanHolidays adds all ZA holidays to the Calendar

func AddSpainHolidays added in v1.0.2

func AddSpainHolidays(c *Calendar)

AddSpainHolidays adds all Spain holidays to the Calendar

func AddSwedishHolidays

func AddSwedishHolidays(c *Calendar)

AddSwedishHolidays adds all Swedish holidays to the Calendar

func AddUkraineHolidays added in v1.0.4

func AddUkraineHolidays(c *Calendar)

AddUkraineHolidays adds all Ukraine holidays to the Calendar

func AddUsHolidays

func AddUsHolidays(cal *Calendar)

AddUsHolidays adds all US holidays to the Calendar

func IsWeekdayN

func IsWeekdayN(date time.Time, day time.Weekday, n int) bool

IsWeekdayN reports whether the given date is the nth occurrence of the day in the month.

The value of n affects the direction of counting:

n > 0: counting begins at the first day of the month.
n == 0: the result is always false.
n < 0: counting begins at the end of the month.

func IsWeekend

func IsWeekend(date time.Time) bool

IsWeekend reports whether the given date falls on a weekend.

func JulianDate

func JulianDate(t time.Time) float32

JulianDate reports the Julian Date (which includes time as a fraction) for t.

func JulianDayNumber

func JulianDayNumber(t time.Time) int

JulianDayNumber reports the Julian Day Number for t. Note that Julian days start at 12:00 UTC.

func MonthEnd

func MonthEnd(t time.Time) time.Time

MonthEnd reports the ending day of the month in t. The time portion is unchanged.

func MonthStart

func MonthStart(t time.Time) time.Time

MonthStart reports the starting day of the month in t. The time portion is unchanged.

Types

type Calendar

type Calendar struct {
	WorkdayFunc WorkdayFn // optional function to override workday flags
	Observed    ObservedRule
	// contains filtered or unexported fields
}

Calendar represents a yearly calendar with a list of holidays.

func NewCalendar

func NewCalendar() *Calendar

NewCalendar creates a new Calendar with no holidays defined and work days of Monday through Friday.

func (*Calendar) AddHoliday

func (c *Calendar) AddHoliday(h ...Holiday)

AddHoliday adds a holiday to the calendar's list.

func (*Calendar) AddSkipNonWorkdays

func (c *Calendar) AddSkipNonWorkdays(start time.Time, d time.Duration) time.Time

AddSkipNonWorkdays returns start time plus d working duration

func (*Calendar) AddWorkHours added in v1.0.5

func (c *Calendar) AddWorkHours(t time.Time, worked time.Duration) time.Time

AddWorkHours determines the time in the future where the worked hours will be completed

func (*Calendar) CountHolidayHoursWithOffset

func (c *Calendar) CountHolidayHoursWithOffset(start time.Time, offsetHour int) int

CountHolidayHoursWithOffset returns the number of working hours in a range starting from the consumed start date to the end date set by the offset

func (*Calendar) CountWorkHours added in v1.0.5

func (c *Calendar) CountWorkHours(start, end time.Time) time.Duration

CountWorkHours counts the actual number of worked hours between 2 different times

func (*Calendar) CountWorkdays

func (c *Calendar) CountWorkdays(start, end time.Time) int64

CountWorkdays return amount of workdays between start and end dates

func (*Calendar) DailyWorkedTime added in v1.0.5

func (c *Calendar) DailyWorkedTime() time.Duration

DailyWorkedTime returns the total time worked per day it makes it easy to compute working times per day allowing calls like c.AddWorkHours(time.Now(), 8 * c.DailyWorkedTime())

func (*Calendar) EndWorkTime added in v1.0.5

func (c *Calendar) EndWorkTime(t time.Time) time.Time

EndWorkTime returns the time at which work ends in the current day

func (*Calendar) IsHoliday

func (c *Calendar) IsHoliday(date time.Time) bool

IsHoliday reports whether a given date is a holiday. It does not account for the observation of holidays on alternate days.

func (*Calendar) IsWorkday

func (c *Calendar) IsWorkday(date time.Time) bool

IsWorkday reports whether a given date is a work day (business day).

func (*Calendar) NextWorkStart added in v1.0.5

func (c *Calendar) NextWorkStart(t time.Time) time.Time

NextWorkStart determines what will be the next future time work will start

func (*Calendar) SetWorkday

func (c *Calendar) SetWorkday(day time.Weekday, workday bool)

SetWorkday changes the given day's status as a standard working day

func (*Calendar) SetWorkingHours added in v1.0.5

func (c *Calendar) SetWorkingHours(start time.Duration, end time.Duration)

SetWorkingHours configures the calendar to override the default 9-17 working hours

func (*Calendar) StartWorkTime added in v1.0.5

func (c *Calendar) StartWorkTime(t time.Time) time.Time

StartWorkTime returns the time at which work starts in the current day

func (*Calendar) SubSkipNonWorkdays added in v1.0.2

func (c *Calendar) SubSkipNonWorkdays(start time.Time, d time.Duration) time.Time

SubSkipNonWorkdays returns start time minus d working duration

func (*Calendar) WorkdayN

func (c *Calendar) WorkdayN(year int, month time.Month, n int) int

WorkdayN reports the day of the month that corresponds to the nth workday for the given year and month.

The value of n affects the direction of counting:

n > 0: counting begins at the first day of the month.
n == 0: the result is always 0.
n < 0: counting begins at the end of the month.

func (*Calendar) Workdays

func (c *Calendar) Workdays(year int, month time.Month) int

Workdays reports the total number of workdays for the given year and month.

func (*Calendar) WorkdaysFrom

func (c *Calendar) WorkdaysFrom(start time.Time, offset int) time.Time

WorkdaysFrom reports the date of a workday that is offset days away from start.

If n > 0, then the date returned is start + offset workdays. If n == 0, then the date is returned unchanged. If n < 0, then the date returned is start - offset workdays.

func (*Calendar) WorkdaysRemain

func (c *Calendar) WorkdaysRemain(date time.Time) int

WorkdaysRemain reports the total number of remaining workdays in the month for the given date.

type Holiday

type Holiday struct {
	Month   time.Month
	Weekday time.Weekday
	Day     int
	Offset  int
	Year    int
	Func    HolidayFn
	// contains filtered or unexported fields
}

Holiday holds information about the yearly occurrence of a holiday.

A valid Holiday consists of one of the following: - Month and Day (such as March 14 for Pi Day) - Month, Weekday, and Offset (such as the second Monday of October for Columbus Day) - Offset (such as the 183rd day of the year for the start of the second half) - Month, Day, and Year (in case you want to specify holidays exactly for each year) - Func (to calculate the holiday)

func NewHoliday

func NewHoliday(month time.Month, day int) Holiday

NewHoliday creates a new Holiday instance for an exact day of a month.

func NewHolidayExact

func NewHolidayExact(month time.Month, day int, year int) Holiday

NewHolidayExact creates a new Holiday instance for an exact day of a month and year.

func NewHolidayFloat

func NewHolidayFloat(month time.Month, weekday time.Weekday, offset int) Holiday

NewHolidayFloat creates a new Holiday instance for an offset-based day of a month.

func NewHolidayFunc

func NewHolidayFunc(fn HolidayFn) Holiday

NewHolidayFunc creates a new Holiday instance that uses a function to calculate the day and month.

type HolidayFn

type HolidayFn func(year int, loc *time.Location) (month time.Month, day int)

HolidayFn calculates the occurrence of a holiday for the given year. This is useful for holidays like Easter that depend on complex rules.

type ObservedRule

type ObservedRule int

ObservedRule represents a rule for observing a holiday that falls on a weekend.

const (
	ObservedNearest       ObservedRule = iota // nearest weekday (Friday or Monday)
	ObservedExact                             // the exact day only
	ObservedMonday                            // Monday always
	ObservedMondayTuesday                     // As above, but also accounts for Christmas Day being on a weekend (which pushes Boxing Day to Tuesday)
)

ObservedRule are the specific ObservedRules

type WorkdayFn added in v1.0.1

type WorkdayFn func(date time.Time) bool

WorkdayFn reports whether the given date is a workday. This is useful for situations where work days change throughout the year.

If your workdays are fixed (Mon-Fri for example) then a WorkdayFn is not necessary and you can use cal.SetWorkday() instead.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL