package server import ( "fmt" "time" ) type Month struct { Year int Month int } func NewFromTime(date time.Time) Month { return Month{date.Year(), int(date.Month())} } func (m Month) String() string { return fmt.Sprintf("%d-%d", m.Year, m.Month) } func (m Month) FirstOfMonth() time.Time { return time.Date(m.Year, time.Month(m.Month), 1, 0, 0, 0, 0, time.Now().Location()) } func (m Month) Previous() Month { if m.Month == int(time.January) { return Month{Year: m.Year - 1, Month: int(time.December)} } return Month{Year: m.Year, Month: m.Month - 1} } func (m Month) Next() Month { if m.Month == int(time.December) { return Month{Year: m.Year + 1, Month: int(time.January)} } return Month{Year: m.Year, Month: m.Month + 1} } func (m Month) InFuture(date time.Time) bool { if m.Year < date.Year() { return true } if m.Year > date.Year() { return false } return time.Month(m.Month) < date.Month() } func (m Month) InPast(date time.Time) bool { if m.Year > date.Year() { return true } if m.Year < date.Year() { return false } return time.Month(m.Month) > date.Month() } func (m Month) InPresent(date time.Time) bool { if date.Year() != m.Year { return false } return date.Month() == time.Month(m.Month) }