| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- 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
- }
|