dateUtil.go 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package utility
  2. import (
  3. "app.yhyue.com/moapp/jybase/common"
  4. "github.com/gogf/gf/v2/util/gconv"
  5. "time"
  6. )
  7. type DateComp struct {
  8. Num int
  9. Unit int // 1-天 2-月 3-年 4-季
  10. }
  11. func GetStartAndEndTime(s time.Time, d ...DateComp) (st, et time.Time) {
  12. var stDate time.Time
  13. if s.IsZero() {
  14. now := time.Now()
  15. stDate = time.Date(now.Year(), now.Month(), now.Day(), 0, 0, 0, 0, time.Local)
  16. } else {
  17. stDate = time.Date(s.Year(), s.Month(), s.Day(), 0, 0, 0, 0, time.Local)
  18. }
  19. var et1 time.Time
  20. st, et1 = stDate, stDate
  21. for _, comp := range d {
  22. if comp.Num > 0 {
  23. switch comp.Unit {
  24. case 1: //天
  25. et1 = et1.AddDate(0, 0, comp.Num)
  26. case 2:
  27. et1 = et1.AddDate(0, comp.Num, 0)
  28. case 4:
  29. et1 = et1.AddDate(0, comp.Num*3, 0)
  30. case 3:
  31. et1 = et1.AddDate(comp.Num, 0, 0)
  32. }
  33. }
  34. }
  35. et = time.Date(et1.Year(), et1.Month(), et1.Day(), 23, 59, 59, 0, time.Local)
  36. return
  37. }
  38. func GetMonthDayNum(startTime, endTime time.Time) float64 {
  39. // 定义开始时间和结束时间
  40. //start := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC)
  41. //end := time.Date(2024, time.March, 30, 0, 0, 0, 0, time.UTC)
  42. var months, day int
  43. // 获取开始时间和结束时间的年份和月份
  44. startYear, startMonth, startDay := startTime.Date()
  45. endYear, endMonth, endDay := endTime.Date()
  46. // 计算月份差异
  47. months = (endYear-startYear)*12 + int(endMonth-startMonth)
  48. if endDay > startDay {
  49. day = endDay - startDay
  50. } else if endDay < startDay {
  51. months -= 1
  52. months = common.If(months < 0, 0, months).(int)
  53. day = gconv.Int(endTime.Sub(startTime.AddDate(0, months, 0)).Hours()) / 24
  54. }
  55. //fmt.Printf("月份差异为:%d\n", months)
  56. return gconv.Float64(months) + gconv.Float64(day)/30
  57. }
  58. func GetMonthNum(num, cycleType int) (monthCount int) {
  59. switch cycleType { // 类型 1天 2月 3年 4季度
  60. case 1:
  61. if num%30 > 0 {
  62. monthCount = num/30 + 1
  63. } else {
  64. monthCount = num / 30
  65. }
  66. case 2:
  67. monthCount = num
  68. case 3:
  69. monthCount = num * 12
  70. case 4:
  71. monthCount = num * 3
  72. }
  73. return
  74. }
  75. func GetMonthNumTime(startTime, endTime time.Time) (monthCount int) {
  76. // 定义开始时间和结束时间
  77. //start := time.Date(2024, time.January, 1, 0, 0, 0, 0, time.UTC)
  78. //end := time.Date(2024, time.March, 30, 0, 0, 0, 0, time.UTC)
  79. // 获取开始时间和结束时间的年份和月份
  80. startYear, startMonth, startDay := startTime.Date()
  81. endYear, endMonth, endDay := endTime.Date()
  82. // 计算月份差异
  83. months := (endYear-startYear)*12 + int(endMonth-startMonth)
  84. if endDay-startDay > 0 {
  85. months += 1
  86. }
  87. //fmt.Printf("月份差异为:%d\n", months)
  88. return months
  89. }