(params ...string)
| 107 | } |
| 108 | |
| 109 | func dateRange(params ...string) bool { |
| 110 | now := time.Now() |
| 111 | if strings.ToUpper(params[len(params)-1]) == "GMT" { |
| 112 | now = now.UTC() |
| 113 | params = params[:len(params)-1] // Strip the GMT flag |
| 114 | } |
| 115 | |
| 116 | currentDay := now.Day() |
| 117 | currentMonth := now.Month() |
| 118 | currentYear := now.Year() |
| 119 | |
| 120 | isYear := func(s string) bool { |
| 121 | val, err := strconv.Atoi(s) |
| 122 | return err == nil && val > 31 |
| 123 | } |
| 124 | isDay := func(s string) bool { |
| 125 | val, err := strconv.Atoi(s) |
| 126 | return err == nil && val >= 1 && val <= 31 |
| 127 | } |
| 128 | |
| 129 | switch len(params) { |
| 130 | case 1: |
| 131 | // Single parameter: True if current day/month/year matches it exactly |
| 132 | val := params[0] |
| 133 | if isYear(val) { |
| 134 | y, _ := strconv.Atoi(val) |
| 135 | return currentYear == y |
| 136 | } |
| 137 | if m, err := parseMonth(val); err == nil { |
| 138 | return currentMonth == m |
| 139 | } |
| 140 | if isDay(val) { |
| 141 | d, _ := strconv.Atoi(val) |
| 142 | return currentDay == d |
| 143 | } |
| 144 | |
| 145 | case 2: |
| 146 | // Two parameters: Can be (day1, day2), (month1, month2), or (year1, year2) |
| 147 | p1, p2 := params[0], params[1] |
| 148 | if isYear(p1) && isYear(p2) { |
| 149 | y1, _ := strconv.Atoi(p1) |
| 150 | y2, _ := strconv.Atoi(p2) |
| 151 | return currentYear >= y1 && currentYear <= y2 |
| 152 | } |
| 153 | m1, err1 := parseMonth(p1) |
| 154 | m2, err2 := parseMonth(p2) |
| 155 | if err1 == nil && err2 == nil { |
| 156 | return currentMonth >= m1 && currentMonth <= m2 |
| 157 | } |
| 158 | if isDay(p1) && isDay(p2) { |
| 159 | d1, _ := strconv.Atoi(p1) |
| 160 | d2, _ := strconv.Atoi(p2) |
| 161 | return currentDay >= d1 && currentDay <= d2 |
| 162 | } |
| 163 | |
| 164 | case 4: |
| 165 | // Four parameters: Can be (day1, month1, day2, month2) or (month1, year1, month2, year2) |
| 166 | m1, err1 := parseMonth(params[0]) |
no test coverage detected