package utility import ( "app.yhyue.com/moapp/jybase/common" "github.com/gogf/gf/v2/util/gconv" "time" ) type DateComp struct { Num int Unit int // 1-天 2-月 3-年 4-季 } func GetStartAndEndTime(s time.Time, d ...DateComp) (st, et time.Time) { var stDate time.Time if s.IsZero() { now := time.Now() stDate = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local) } else { stDate = time.Date(s.Year(), s.Month(), s.Day(), 0, 0, 0, 0, time.Local) } var et1 time.Time st, et1 = stDate, stDate for _, comp := range d { if comp.Num > 0 { switch comp.Unit { case 1: //天 et1 = et1.AddDate(0, 0, comp.Num) case 2: et1 = et1.AddDate(0, comp.Num, 0) case 4: et1 = et1.AddDate(0, comp.Num*3, 0) case 3: et1 = et1.AddDate(comp.Num, 0, 0) } } } et = time.Date(et1.Year(), et1.Month(), et1.Day(), 23, 59, 59, 0, time.Local) return } func GetMonthDayNum(startTime, endTime time.Time) float64 { // 定义开始时间和结束时间 //start := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC) //end := time.Date(2024, time.March, 30, 0, 0, 0, 0, time.UTC) var months, day int // 获取开始时间和结束时间的年份和月份 startYear, startMonth, startDay := startTime.Date() endYear, endMonth, endDay := endTime.Date() // 计算月份差异 months = (endYear-startYear)*12 + int(endMonth-startMonth) if endDay > startDay { day = endDay - startDay } else if endDay < startDay { months -= 1 months = common.If(months < 0, 0, months).(int) day = gconv.Int(endTime.Sub(startTime.AddDate(0, months, 0)).Hours()) / 24 } //fmt.Printf("月份差异为:%d\n", months) return gconv.Float64(months) + gconv.Float64(day)/30 } func GetMonthNum(num, cycleType int) (monthCount int) { switch cycleType { // 类型 1天 2月 3年 4季度 case 1: if num%30 > 0 { monthCount = num/30 + 1 } else { monthCount = num / 30 } case 2: monthCount = num case 3: monthCount = num * 12 case 4: monthCount = num * 3 } return } func GetMonthNumTime(startTime, endTime time.Time) (monthCount int) { // 定义开始时间和结束时间 //start := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC) //end := time.Date(2024, time.March, 30, 0, 0, 0, 0, time.UTC) // 获取开始时间和结束时间的年份和月份 startYear, startMonth, startDay := startTime.Date() endYear, endMonth, endDay := endTime.Date() // 计算月份差异 months := (endYear-startYear)*12 + int(endMonth-startMonth) if endDay-startDay > 0 { months += 1 } //fmt.Printf("月份差异为:%d\n", months) return months }