Skip to content

Commit cfa9f62

Browse files
committed
fix(validator): months do not start from 0
1 parent 0168280 commit cfa9f62

File tree

4 files changed

+20
-15
lines changed

4 files changed

+20
-15
lines changed

checker.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ func boundsByPos(pos int) (bounds []int) {
126126
case 5:
127127
bounds = []int{0, 7}
128128
case 6:
129-
bounds = []int{1, 9999}
129+
bounds = []int{0, 9999}
130130
}
131131
return
132132
}

gronx_test.go

+2-1
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,8 @@ func testcases() []Case {
158158
{"* 20,21,22 * * *", "2015-08-10 21:50:00", true, "2015-08-10 21:51:00"},
159159
{"* 20,22 * * *", "2015-08-10 21:50:00", false, "2015-08-10 22:00:00"},
160160
{"* 5,21-22 * * *", "2015-08-10 21:50:00", true, "2015-08-10 21:51:00"},
161-
{"7-9 * */9 * *", "2015-08-10 22:02:00", false, "2015-08-18 00:07:00"},
161+
{"7-9 * */9 * *", "2015-08-10 22:02:00", false, "2015-08-10 22:07:00"},
162+
{"7-9 * */9 * *", "2015-08-11 22:02:00", false, "2015-08-19 00:07:00"},
162163
{"1 * * * 7", "2015-08-10 21:47:00", false, "2015-08-16 00:01:00"},
163164
{"47 21 * * *", "2015-08-10 21:47:00", true, "2015-08-11 21:47:00"},
164165
{"00 * * * *", "2023-07-21 12:30:00", false, "2023-07-21 13:00:00"},

next.go

+13-12
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ over:
6161
if reverse {
6262
delta = -time.Second
6363
}
64-
next, _, err = bumpUntilDue(gron.C, segments[0], 0, next.Add(delta), reverse)
64+
next = next.Add(delta)
6565
continue
6666
}
6767
return
@@ -118,44 +118,45 @@ func bump(ref time.Time, pos int, reverse bool) time.Time {
118118
if reverse {
119119
factor = -1
120120
}
121+
loc := ref.Location()
121122

122123
switch pos {
123124
case 0:
124125
ref = ref.Add(time.Duration(factor) * time.Second)
125126
case 1:
126127
minTime := ref.Add(time.Duration(factor) * time.Minute)
127128
if reverse {
128-
ref = time.Date(minTime.Year(), minTime.Month(), minTime.Day(), minTime.Hour(), minTime.Minute(), 59, 0, minTime.Location())
129+
ref = time.Date(minTime.Year(), minTime.Month(), minTime.Day(), minTime.Hour(), minTime.Minute(), 59, 0, loc)
129130
} else {
130-
ref = time.Date(minTime.Year(), minTime.Month(), minTime.Day(), minTime.Hour(), minTime.Minute(), 0, 0, minTime.Location())
131+
ref = time.Date(minTime.Year(), minTime.Month(), minTime.Day(), minTime.Hour(), minTime.Minute(), 0, 0, loc)
131132
}
132133
case 2:
133134
hTime := ref.Add(time.Duration(factor) * time.Hour)
134135
if reverse {
135-
ref = time.Date(hTime.Year(), hTime.Month(), hTime.Day(), hTime.Hour(), 59, 59, 0, hTime.Location())
136+
ref = time.Date(hTime.Year(), hTime.Month(), hTime.Day(), hTime.Hour(), 59, 59, 0, loc)
136137
} else {
137-
ref = time.Date(hTime.Year(), hTime.Month(), hTime.Day(), hTime.Hour(), 0, 0, 0, hTime.Location())
138+
ref = time.Date(hTime.Year(), hTime.Month(), hTime.Day(), hTime.Hour(), 0, 0, 0, loc)
138139
}
139140
case 3, 5:
140141
dTime := ref.AddDate(0, 0, factor)
141142
if reverse {
142-
ref = time.Date(dTime.Year(), dTime.Month(), dTime.Day(), 23, 59, 59, 0, dTime.Location())
143+
ref = time.Date(dTime.Year(), dTime.Month(), dTime.Day(), 23, 59, 59, 0, loc)
143144
} else {
144-
ref = time.Date(dTime.Year(), dTime.Month(), dTime.Day(), 0, 0, 0, 0, dTime.Location())
145+
ref = time.Date(dTime.Year(), dTime.Month(), dTime.Day(), 0, 0, 0, 0, loc)
145146
}
146147
case 4:
147-
mTime := ref.AddDate(0, factor, 0)
148+
ref = time.Date(ref.Year(), ref.Month(), 1, 0, 0, 0, 0, loc)
148149
if reverse {
149-
ref = time.Date(mTime.Year(), ref.Month(), -1, 23, 59, 59, 0, mTime.Location())
150+
ref = ref.Add(time.Duration(factor) * time.Second)
150151
} else {
151-
ref = time.Date(mTime.Year(), mTime.Month(), 1, 0, 0, 0, 0, mTime.Location())
152+
ref = ref.AddDate(0, factor, 0)
152153
}
153154
case 6:
154155
yTime := ref.AddDate(factor, 0, 0)
155156
if reverse {
156-
ref = time.Date(yTime.Year(), 12, 31, 23, 59, 59, 0, yTime.Location())
157+
ref = time.Date(yTime.Year(), 12, 31, 23, 59, 59, 0, loc)
157158
} else {
158-
ref = time.Date(yTime.Year(), 1, 1, 0, 0, 0, 0, yTime.Location())
159+
ref = time.Date(yTime.Year(), 1, 1, 0, 0, 0, 0, loc)
159160
}
160161
}
161162
return ref

validator.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,10 @@ func inStep(val int, s string, bounds []int) (bool, error) {
1818
return false, errors.New("step can't be 0")
1919
}
2020

21-
if strings.Index(s, "*/") == 0 || strings.Index(s, "0/") == 0 {
21+
if strings.Index(s, "*/") == 0 {
22+
return (val-bounds[0])%step == 0, nil
23+
}
24+
if strings.Index(s, "0/") == 0 {
2225
return val%step == 0, nil
2326
}
2427

0 commit comments

Comments
 (0)