106 lines
1.9 KiB
Go
106 lines
1.9 KiB
Go
package server
|
|
|
|
import (
|
|
"fmt"
|
|
"strconv"
|
|
"time"
|
|
|
|
"github.com/gin-gonic/gin"
|
|
)
|
|
|
|
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) nextMonth() Month {
|
|
if m.Month == 12 {
|
|
return Month{m.Year + 1, 1}
|
|
}
|
|
return Month{m.Year, m.Month}
|
|
}
|
|
|
|
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) isBeforeOrContains(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 false
|
|
}
|
|
|
|
if m.Year < date.Year() {
|
|
return true
|
|
}
|
|
|
|
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)
|
|
}
|
|
|
|
func getDate(c *gin.Context) (Month, error) {
|
|
var year, month int
|
|
yearString := c.Param("year")
|
|
monthString := c.Param("month")
|
|
if yearString == "" && monthString == "" {
|
|
return getFirstOfMonthTime(time.Now()), nil
|
|
}
|
|
|
|
year, err := strconv.Atoi(yearString)
|
|
if err != nil {
|
|
return Month{}, fmt.Errorf("parse year: %w", err)
|
|
}
|
|
|
|
month, err = strconv.Atoi(monthString)
|
|
if err != nil {
|
|
return Month{}, fmt.Errorf("parse month: %w", err)
|
|
}
|
|
|
|
return Month{year, month}, nil
|
|
}
|
|
|
|
func getFirstOfMonthTime(date time.Time) Month {
|
|
var monthM time.Month
|
|
year, monthM, _ := date.Date()
|
|
month := int(monthM)
|
|
return Month{year, month}
|
|
}
|