package utils import ( "encoding/json" "fmt" "strconv" "strings" "time" ) // DateFormmat 格式化日期 // 参数: // t - 日期字符串 // format - 日期格式字符串(例如 "2006-01-02 15:04:05") // 返回值: // 格式化后的日期字符串 func DateFormmat(t string, format string) string { return TimestampToString(StringToTimestamp(t, "2006-01-02 15:04"), "2006-01-02") } // TimestampToString 将 Unix 时间戳转换为指定格式的时间字符串 // 参数: // t - Unix 时间戳(秒级) // format - 时间格式字符串(例如 "2006-01-02 15:04:05") // 返回值: // 格式化后的时间字符串 func TimestampToString(t int64, format string) string { t_obj := time.Unix(t, 0) return t_obj.Format(format) } // StringToTimestamp 将指定格式的时间字符串转换为 Unix 时间戳 // 参数: // t - 时间字符串 // format - 时间格式字符串(例如 "2006-01-02 15:04:05") // 返回值: // Unix 时间戳(秒级) func StringToTimestamp(t string, format string) int64 { t_obj, err := time.ParseInLocation(format, t, time.Local) if err != nil { return 0 } return t_obj.Unix() } // Contains 检查切片中是否包含指定元素 // 参数: // slice - 待检查的切片 // item - 要查找的元素 // 返回值: // 如果切片中包含指定元素,则返回 true;否则返回 false func Contains[T comparable](slice []T, item T) bool { for _, v := range slice { if v == item { return true } } return false } func StringJsonConvert[T comparable](jsonSt T) ([]byte, error) { // 将结构体转换为 JSON jsonData, err := json.Marshal(jsonSt) if err != nil { return []byte{}, fmt.Errorf("JSON 编码失败: %w", err) } // 去除转义字符的方法:先反序列化再序列化 var temp interface{} if err = json.Unmarshal(jsonData, &temp); err != nil { return []byte{}, fmt.Errorf("JSON 反序列化失败: %w", err) } cleanJson, err := json.Marshal(temp) if err != nil { return []byte{}, fmt.Errorf("JSON 重新序列化失败: %w", err) } return cleanJson, nil } func ParseDateRange(rangeStr string) ([]string, error) { parts := strings.Split(rangeStr, "-") if len(parts) != 2 { return nil, fmt.Errorf("invalid format, expected start-end") } start, err1 := strconv.Atoi(parts[0]) end, err2 := strconv.Atoi(parts[1]) if err1 != nil || err2 != nil { return nil, fmt.Errorf("invalid number format") } if start > end { return nil, fmt.Errorf("start cannot be greater than end") } now := time.Now() var dates []string for i := start; i <= end; i++ { t := now.AddDate(0, 0, i) dates = append(dates, t.Format("2006-01-02")) } return dates, nil }