ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
~~~ package toolutilv3 import ( "fmt" "sort" "time" ) var ToolTime = toolTimeUtil{} type toolTimeUtil struct{} /* ParseInLocation 将指定格式的时间字符串解析为 time.Time 类型,使用本地时区 IsThisWeek 判断给定的时间是否在本周内 GetNLastYears 获取输入时间往前N个年份 GetNLastQuarters 获取输入时间往前N个季度 GetNLastMonths 获取输入时间往前N个月 */ /* layout: 时间字符串格式 2006-01-02 15:04:05 value: 时间字符串 返回值: 解析后的 time.Time 对象 */ //ParseInLocation 将指定格式的时间字符串解析为 time.Time 类型,使用本地时区 func (t *toolTimeUtil) ParseInLocation(layout, value string) time.Time { // 使用 time.ParseInLocation 函数将字符串解析为 time.Time 类型 tt, _ := time.ParseInLocation(layout, value, time.Local) return tt } // IsThisWeek 判断给定的时间是否在本周内 func (t *toolTimeUtil) IsThisWeek(tt time.Time) bool { // 获取当前时间 now := time.Now() // 计算本周的开始时间 weekStart := now.AddDate(0, 0, -int(now.Weekday())) // 计算本周的结束时间 weekEnd := weekStart.AddDate(0, 0, 7) // 判断时间是否在本周内,并返回结果 return !tt.Before(weekStart) && tt.Before(weekEnd) } /* isAsc 参数控制是否为升序排列。如果 isAsc 为 true,则按照升序排列;否则,按照降序排列。 */ // GetNLastYears 获取输入时间往前N个年份 func (t *toolTimeUtil) GetNLastYears(tt time.Time, n int, isAsc bool) []int { result := make([]int, n) for i := 0; i < n; i++ { result[i] = tt.Year() - i } if isAsc { sort.Ints(result) } return result } /* isAsc 参数控制是否为升序排列。如果 isAsc 为 true,则按照升序排列;否则,按照降序排列。 */ // GetNLastQuarters 获取输入时间往前N个季度 func (t *toolTimeUtil) GetNLastQuarters(tt time.Time, n int, isAsc bool) []string { result := make([]string, n) now := tt quarter := int(now.Month()-1)/3 + 1 // 获取当前季度 lastQuarter := quarter // 计算上一季度 year := now.Year() lastYear := year for i := 0; i < n; i++ { if lastQuarter == 0 { // 上一季度是去年的 Q4 lastQuarter = 4 lastYear-- } quarterName := fmt.Sprintf("Q%d", lastQuarter) result[i] = fmt.Sprintf("%d-%s", lastYear, quarterName) lastQuarter-- } if isAsc { sort.Strings(result) } return result } /* isAsc 参数控制是否为升序排列。如果 isAsc 为 true,则按照升序排列;否则,按照降序排列。 */ // GetNLastMonths 获取输入时间往前N个月 func (t *toolTimeUtil) GetNLastMonths(tt time.Time, n int, isAsc bool) []string { result := make([]string, n) now := tt for i := 0; i < n; i++ { index := i if !isAsc { index = n - i - 1 } result[index] = now.AddDate(0, i-n+1, 0).Format("2006-01") } return result } ~~~