function.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. package utils
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. "time"
  8. )
  9. // DateFormmat 格式化日期
  10. // 参数:
  11. // t - 日期字符串
  12. // format - 日期格式字符串(例如 "2006-01-02 15:04:05")
  13. // 返回值:
  14. // 格式化后的日期字符串
  15. func DateFormmat(t string, format string) string {
  16. return TimestampToString(StringToTimestamp(t, "2006-01-02 15:04"), "2006-01-02")
  17. }
  18. // TimestampToString 将 Unix 时间戳转换为指定格式的时间字符串
  19. // 参数:
  20. // t - Unix 时间戳(秒级)
  21. // format - 时间格式字符串(例如 "2006-01-02 15:04:05")
  22. // 返回值:
  23. // 格式化后的时间字符串
  24. func TimestampToString(t int64, format string) string {
  25. t_obj := time.Unix(t, 0)
  26. return t_obj.Format(format)
  27. }
  28. // StringToTimestamp 将指定格式的时间字符串转换为 Unix 时间戳
  29. // 参数:
  30. // t - 时间字符串
  31. // format - 时间格式字符串(例如 "2006-01-02 15:04:05")
  32. // 返回值:
  33. // Unix 时间戳(秒级)
  34. func StringToTimestamp(t string, format string) int64 {
  35. t_obj, err := time.ParseInLocation(format, t, time.Local)
  36. if err != nil {
  37. return 0
  38. }
  39. return t_obj.Unix()
  40. }
  41. // Contains 检查切片中是否包含指定元素
  42. // 参数:
  43. // slice - 待检查的切片
  44. // item - 要查找的元素
  45. // 返回值:
  46. // 如果切片中包含指定元素,则返回 true;否则返回 false
  47. func Contains[T comparable](slice []T, item T) bool {
  48. for _, v := range slice {
  49. if v == item {
  50. return true
  51. }
  52. }
  53. return false
  54. }
  55. func StringJsonConvert[T comparable](jsonSt T) ([]byte, error) {
  56. // 将结构体转换为 JSON
  57. jsonData, err := json.Marshal(jsonSt)
  58. if err != nil {
  59. return []byte{}, fmt.Errorf("JSON 编码失败: %w", err)
  60. }
  61. // 去除转义字符的方法:先反序列化再序列化
  62. var temp interface{}
  63. if err = json.Unmarshal(jsonData, &temp); err != nil {
  64. return []byte{}, fmt.Errorf("JSON 反序列化失败: %w", err)
  65. }
  66. cleanJson, err := json.Marshal(temp)
  67. if err != nil {
  68. return []byte{}, fmt.Errorf("JSON 重新序列化失败: %w", err)
  69. }
  70. return cleanJson, nil
  71. }
  72. func ParseDateRange(rangeStr string) ([]string, error) {
  73. parts := strings.Split(rangeStr, "-")
  74. if len(parts) != 2 {
  75. return nil, fmt.Errorf("invalid format, expected start-end")
  76. }
  77. start, err1 := strconv.Atoi(parts[0])
  78. end, err2 := strconv.Atoi(parts[1])
  79. if err1 != nil || err2 != nil {
  80. return nil, fmt.Errorf("invalid number format")
  81. }
  82. if start > end {
  83. return nil, fmt.Errorf("start cannot be greater than end")
  84. }
  85. now := time.Now()
  86. var dates []string
  87. for i := start; i <= end; i++ {
  88. t := now.AddDate(0, 0, i)
  89. dates = append(dates, t.Format("2006-01-02"))
  90. }
  91. return dates, nil
  92. }