🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
~~~ /* Package toolutilv4 提供了一组时间工具函数 - ParseInLocation: 将指定格式的时间字符串解析为 time.Time 类型,使用本地时区 - IsThisWeek: 判断给定的时间是否在本周内 - GetFirstAndLastDayOfMonth 返回指定时间的第一天和最后一天的时间,并以字符串形式返回日期的年月日 - GetNDayStrMap 获取不同类型时间段的日期数据 - GetNLastYears: 获取输入时间往前N个年份 - GetNLastQuarters: 获取输入时间往前N个季度 - GetNLastMonths: 获取输入时间往前N个月 */ package toolutilv4 import ( "fmt" "sort" "time" ) var ToolTime = toolTimeUtil{} type toolTimeUtil struct{} // ParseInLocation 将指定格式的时间字符串解析为 time.Time 类型,使用本地时区 // 时间字符串格式为参数 layout 所指定的格式,返回解析后的 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) } // GetFirstAndLastDayOfMonth 返回指定时间的第一天和最后一天的时间,并以字符串形式返回日期的年月日 func (t *toolTimeUtil) GetFirstAndLastDayOfMonth(tt time.Time) (string, string) { // 获取本月的第一天和最后一天 firstDay := time.Date(tt.Year(), tt.Month(), 1, 0, 0, 0, 0, tt.Location()) lastDay := firstDay.AddDate(0, 1, 0).Add(-time.Nanosecond) // 格式化为字符串日期的年月日 firstDayStr := firstDay.Format("2006-01-02") lastDayStr := lastDay.Format("2006-01-02") return firstDayStr, lastDayStr } // GetNDayStrMap 获取不同类型时间段的日期数据 // 1近一周;2近一月;3近半年;4近一年 func (t *toolTimeUtil) GetNDayStrMap(types int) []map[string]interface{} { var dataArr = make([]map[string]interface{}, 0) now := time.Now() switch types { case 1: for i := 6; i >= 0; i-- { // 获取当前日期并格式化为 "01-02" 的形式 date := now.AddDate(0, 0, -i).Format("01-02") // 将日期作为键,初始值为0作为值存储到 map 中 dataArr = append(dataArr, map[string]interface{}{"name": date, "value": 0}) } case 2: for i := 29; i >= 0; i-- { // 获取当前日期并格式化为 "01-02" 的形式 date := now.AddDate(0, 0, -i).Format("01-02") // 将日期作为键,初始值为0作为值存储到 map 中 dataArr = append(dataArr, map[string]interface{}{"name": date, "value": 0}) } case 3: for i := 5; i >= 0; i-- { // 获取当前年月并格式化为 "2006-01" 的形式 date := now.AddDate(0, -i, 0).Format("2006-01") // 将日期作为键,初始值为0作为值存储到 map 中 dataArr = append(dataArr, map[string]interface{}{"name": date, "value": 0}) } case 4: for i := 11; i >= 0; i-- { // 获取当前年月并格式化为 "2006-01" 的形式 date := now.AddDate(0, -i, 0).Format("2006-01") // 将日期作为键,初始值为0作为值存储到 map 中 dataArr = append(dataArr, map[string]interface{}{"name": date, "value": 0}) } } return dataArr } // 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 } // 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 } // GetNLastMonths 获取输入时间往前N个月 func (t *toolTimeUtil) GetNLastMonths(tt time.Time, n int, isAsc bool) []string { result := make([]string, n) for i := 0; i < n; i++ { index := i if !isAsc { index = n - i - 1 } result[index] = tt.AddDate(0, -i, 0).Format("2006-01") } return result } ~~~