package util import "time" // TimeRange 定义时间范围结构体 type TimeRange struct { StartTime time.Time EndTime time.Time StartUnix int64 EndUnix int64 } // GetDayRange 计算当天的时间范围 func GetDayRange(t time.Time) TimeRange { // 当天开始时间:00:00:00 start := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location()) // 当天结束时间:23:59:59 end := start.Add(24*time.Hour - time.Second) return TimeRange{ StartTime: start, EndTime: end, StartUnix: start.Unix(), EndUnix: end.Unix(), } } // GetWeekRange 计算当周的时间范围(周一到周日) func GetWeekRange(t time.Time) TimeRange { // 计算距离周一的天数 weekday := int(t.Weekday()) if weekday == 0 { weekday = 7 // 将周日(0)视为一周的最后一天 } // 周一的开始时间:周一 00:00:00 start := time.Date(t.Year(), t.Month(), t.Day()-weekday+1, 0, 0, 0, 0, t.Location()) // 周日的结束时间:周日 23:59:59 end := start.Add(7*24*time.Hour - time.Second) return TimeRange{ StartTime: start, EndTime: end, StartUnix: start.Unix(), EndUnix: end.Unix(), } } // GetMonthRange 计算当月的时间范围 func GetMonthRange(t time.Time) TimeRange { // 当月第一天的开始时间:第一天 00:00:00 start := time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location()) // 下月第一天减一秒:当月最后一天 23:59:59 end := start.AddDate(0, 1, 0).Add(-time.Second) return TimeRange{ StartTime: start, EndTime: end, StartUnix: start.Unix(), EndUnix: end.Unix(), } }