72 lines
1.2 KiB
Go
72 lines
1.2 KiB
Go
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 == 1 {
|
|
return Month{Year: m.Year - 1, Month: 12}
|
|
}
|
|
|
|
return Month{Year: m.Year, Month: m.Month - 1}
|
|
}
|
|
|
|
func (m Month) Next() Month {
|
|
if m.Month == 12 {
|
|
return Month{Year: m.Year + 1, Month: 1}
|
|
}
|
|
|
|
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)
|
|
}
|