@@ -139,7 +139,12 @@ export class DateTime extends Time {
139
139
this . fixDay ( )
140
140
}
141
141
142
- public addHours ( hours : number , filtered : boolean , byhour : number [ ] ) {
142
+ public addHours (
143
+ hours : number ,
144
+ filtered : boolean ,
145
+ byhour : number [ ] ,
146
+ until ?: Date
147
+ ) {
143
148
if ( filtered ) {
144
149
// Jump to one iteration before next day
145
150
this . hour += Math . floor ( ( 23 - this . hour ) / hours ) * hours
@@ -154,14 +159,21 @@ export class DateTime extends Time {
154
159
}
155
160
156
161
if ( empty ( byhour ) || includes ( byhour , this . hour ) ) break
162
+
163
+ if ( this . exceedUntilOrMaxYear ( until ) ) break
157
164
}
158
165
}
159
166
167
+ private exceedUntilOrMaxYear ( until ?: Date ) : boolean {
168
+ return ( until && this . getTime ( ) > until . getTime ( ) ) || this . year > MAXYEAR
169
+ }
170
+
160
171
public addMinutes (
161
172
minutes : number ,
162
173
filtered : boolean ,
163
174
byhour : number [ ] ,
164
- byminute : number [ ]
175
+ byminute : number [ ] ,
176
+ until ?: Date
165
177
) {
166
178
if ( filtered ) {
167
179
// Jump to one iteration before next day
@@ -183,6 +195,8 @@ export class DateTime extends Time {
183
195
) {
184
196
break
185
197
}
198
+
199
+ if ( this . exceedUntilOrMaxYear ( until ) ) break
186
200
}
187
201
}
188
202
@@ -191,7 +205,8 @@ export class DateTime extends Time {
191
205
filtered : boolean ,
192
206
byhour : number [ ] ,
193
207
byminute : number [ ] ,
194
- bysecond : number [ ]
208
+ bysecond : number [ ] ,
209
+ until ?: Date
195
210
) {
196
211
if ( filtered ) {
197
212
// Jump to one iteration before next day
@@ -217,6 +232,8 @@ export class DateTime extends Time {
217
232
) {
218
233
break
219
234
}
235
+
236
+ if ( this . exceedUntilOrMaxYear ( until ) ) break
220
237
}
221
238
}
222
239
@@ -246,7 +263,7 @@ export class DateTime extends Time {
246
263
}
247
264
248
265
public add ( options : ParsedOptions , filtered : boolean ) {
249
- const { freq, interval, wkst, byhour, byminute, bysecond } = options
266
+ const { freq, interval, wkst, byhour, byminute, bysecond, until } = options
250
267
251
268
switch ( freq ) {
252
269
case Frequency . YEARLY :
@@ -258,11 +275,18 @@ export class DateTime extends Time {
258
275
case Frequency . DAILY :
259
276
return this . addDaily ( interval )
260
277
case Frequency . HOURLY :
261
- return this . addHours ( interval , filtered , byhour )
278
+ return this . addHours ( interval , filtered , byhour , until )
262
279
case Frequency . MINUTELY :
263
- return this . addMinutes ( interval , filtered , byhour , byminute )
280
+ return this . addMinutes ( interval , filtered , byhour , byminute , until )
264
281
case Frequency . SECONDLY :
265
- return this . addSeconds ( interval , filtered , byhour , byminute , bysecond )
282
+ return this . addSeconds (
283
+ interval ,
284
+ filtered ,
285
+ byhour ,
286
+ byminute ,
287
+ bysecond ,
288
+ until
289
+ )
266
290
}
267
291
}
268
292
}
0 commit comments