timeRange.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package util
  2. import "time"
  3. // TimeRange 定义时间范围结构体
  4. type TimeRange struct {
  5. StartTime time.Time
  6. EndTime time.Time
  7. StartUnix int64
  8. EndUnix int64
  9. }
  10. // GetDayRange 计算当天的时间范围
  11. func GetDayRange(t time.Time) TimeRange {
  12. // 当天开始时间:00:00:00
  13. start := time.Date(t.Year(), t.Month(), t.Day(), 0, 0, 0, 0, t.Location())
  14. // 当天结束时间:23:59:59
  15. end := start.Add(24*time.Hour - time.Second)
  16. return TimeRange{
  17. StartTime: start,
  18. EndTime: end,
  19. StartUnix: start.Unix(),
  20. EndUnix: end.Unix(),
  21. }
  22. }
  23. // GetWeekRange 计算当周的时间范围(周一到周日)
  24. func GetWeekRange(t time.Time) TimeRange {
  25. // 计算距离周一的天数
  26. weekday := int(t.Weekday())
  27. if weekday == 0 {
  28. weekday = 7 // 将周日(0)视为一周的最后一天
  29. }
  30. // 周一的开始时间:周一 00:00:00
  31. start := time.Date(t.Year(), t.Month(), t.Day()-weekday+1, 0, 0, 0, 0, t.Location())
  32. // 周日的结束时间:周日 23:59:59
  33. end := start.Add(7*24*time.Hour - time.Second)
  34. return TimeRange{
  35. StartTime: start,
  36. EndTime: end,
  37. StartUnix: start.Unix(),
  38. EndUnix: end.Unix(),
  39. }
  40. }
  41. // GetMonthRange 计算当月的时间范围
  42. func GetMonthRange(t time.Time) TimeRange {
  43. // 当月第一天的开始时间:第一天 00:00:00
  44. start := time.Date(t.Year(), t.Month(), 1, 0, 0, 0, 0, t.Location())
  45. // 下月第一天减一秒:当月最后一天 23:59:59
  46. end := start.AddDate(0, 1, 0).Add(-time.Second)
  47. return TimeRange{
  48. StartTime: start,
  49. EndTime: end,
  50. StartUnix: start.Unix(),
  51. EndUnix: end.Unix(),
  52. }
  53. }