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  }