date_util.go 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. // Package utils @Author gmy 2024/8/6 16:06:00
  2. package utils
  3. import (
  4. "fmt"
  5. "strings"
  6. "time"
  7. )
  8. // ParseDateAndWeek parseDateAndWeek 解析日期并计算当前周数 ==> 24年31周
  9. func ParseDateAndWeek(dateText string) (string, error) {
  10. // 解析日期
  11. reportDate, err := time.Parse("2006-01-02", strings.TrimSpace(strings.Split(dateText, " ")[0]))
  12. if err != nil {
  13. return "", fmt.Errorf("failed to parse report date: %v", err)
  14. }
  15. // 计算年份和周数
  16. year, week := reportDate.ISOWeek()
  17. // 获取年份的后两位
  18. shortYear := year % 100
  19. targetWeek := fmt.Sprintf("%02d年第%d周", shortYear, week)
  20. return targetWeek, nil
  21. }
  22. // ParseDateAndMonth 解析时间并计算当前月份 和 后两月 1月就是1月F,二月是二月G 规则:F=1月,G=2月,H=3月,J=4月,K=5月,M=6月,N=7月,Q=8月,U=9月,V=10月,X=11月,Z=12月
  23. func ParseDateAndMonth(dateText string) ([]string, error) {
  24. reportDate, err := time.Parse("2006-01-02", strings.TrimSpace(strings.Split(dateText, " ")[0]))
  25. if err != nil {
  26. return nil, fmt.Errorf("failed to parse report date: %v", err)
  27. }
  28. months := make([]string, 3)
  29. monthMap := map[string]string{
  30. "01": "1月F",
  31. "02": "2月G",
  32. "03": "3月H",
  33. "04": "4月J",
  34. "05": "5月K",
  35. "06": "6月M",
  36. "07": "7月N",
  37. "08": "8月Q",
  38. "09": "9月X",
  39. "10": "10月X",
  40. "11": "11月X",
  41. "12": "12月Z",
  42. }
  43. for i := 0; i < 3; i++ {
  44. month := reportDate.AddDate(0, i, 0).Format("01")
  45. months[i] = monthMap[month]
  46. }
  47. return months, nil
  48. }
  49. // GetCurrentTime 获取当前时间 格式为 2024-08-07 15:29:58
  50. func GetCurrentTime() string {
  51. return time.Now().Format("2006-01-02 15:04:05")
  52. }
  53. // ConvertTimeFormat 转换时间格式 dateText 格式为 2024-08-03 07:53 --> 2024-08-03
  54. func ConvertTimeFormat(dateText string) (string, error) {
  55. // 解析日期
  56. reportDate, err := time.Parse("2006-01-02 15:04", strings.TrimSpace(dateText))
  57. if err != nil {
  58. return "", fmt.Errorf("failed to parse report date: %v", err)
  59. }
  60. return reportDate.Format("2006-01-02"), nil
  61. }
  62. // ConvertTimeFormatToYearMonth 转换时间格式 dateText 返回本月 和 后两月 格式为 2024-08-03 --> 2024年8月,2024-10-03 --> 2024年10月
  63. func ConvertTimeFormatToYearMonth(dateText string) ([]string, error) {
  64. // 解析日期
  65. reportDate, err := time.Parse("2006-01-02", strings.TrimSpace(dateText))
  66. if err != nil {
  67. return nil, fmt.Errorf("failed to parse report date: %v", err)
  68. }
  69. months := make([]string, 3)
  70. for i := 0; i < 3; i++ {
  71. month := reportDate.AddDate(0, i, 0).Format("2006年1月")
  72. months[i] = month
  73. }
  74. return months, nil
  75. }
  76. // GetCurrentYearAndNextYear 获取当时所在得年度和明年得年度列表 2024-08-03 --> 2023/24年度, 2024/25年度
  77. func GetCurrentYearAndNextYear(dateText string) ([]string, error) {
  78. // 解析日期
  79. reportDate, err := time.Parse("2006-01-02", strings.TrimSpace(dateText))
  80. if err != nil {
  81. return nil, fmt.Errorf("failed to parse report date: %v", err)
  82. }
  83. years := make([]string, 2)
  84. year := reportDate.Year()
  85. // 当前年度
  86. years[0] = fmt.Sprintf("%d/%02d年度", year-1, year%100)
  87. // 下一年度
  88. years[1] = fmt.Sprintf("%d/%02d年度", year, (year+1)%100)
  89. return years, nil
  90. }
  91. // GetCurrentMonth 获取当前月份 2024-08-03 --> 8月
  92. func GetCurrentMonth(dateText string) (string, error) {
  93. // 解析日期
  94. reportDate, err := time.Parse("2006-01-02", strings.TrimSpace(dateText))
  95. if err != nil {
  96. return "", fmt.Errorf("failed to parse report date: %v", err)
  97. }
  98. // 计算月份
  99. month := reportDate.Month()
  100. return fmt.Sprintf("%d月", month), nil
  101. }