github.com/seeker-insurance/kit@v0.0.13/calendar/calendar.go (about) 1 package calendar 2 3 import ( 4 "time" 5 6 "github.com/rickar/cal" 7 ) 8 9 // USCalendar ... 10 type USCalendar struct { 11 Calendar *cal.Calendar 12 } 13 14 // AddWorkHours add number of working hours to a provided time 15 // excludes weekends, holidays and time between 6pm and 8am 16 func (c *USCalendar) AddWorkHours(t time.Time, hours int) time.Time { 17 if hours < 1 { 18 return t 19 } 20 21 newT := t.Add(time.Duration(1) * time.Hour) 22 hour := newT.Hour() 23 if c.Calendar.IsWorkday(newT) && hour >= 8 && hour < 18 { 24 hours-- 25 } 26 27 return c.AddWorkHours(newT, hours) 28 } 29 30 // SetupUSCalendar ... 31 func SetupUSCalendar() *USCalendar { 32 c := &USCalendar{Calendar: cal.NewCalendar()} 33 c.Calendar.AddHoliday( 34 cal.USIndependence, 35 cal.USThanksgiving, 36 cal.USChristmas, 37 cal.USColumbus, 38 cal.USLabor, 39 cal.USMLK, 40 cal.USMemorial, 41 cal.USNewYear, 42 ) 43 44 return c 45 }