diff --git a/.changeset/blue-comics-prove.md b/.changeset/blue-comics-prove.md new file mode 100644 index 00000000000..ff5628c9656 --- /dev/null +++ b/.changeset/blue-comics-prove.md @@ -0,0 +1,5 @@ +--- +"effect": patch +--- + +Fixed double firing of cron schedules in cases where the current time matched the initial interval. diff --git a/packages/effect/src/internal/schedule.ts b/packages/effect/src/internal/schedule.ts index 5e3adeeaeb9..f554227dafa 100644 --- a/packages/effect/src/internal/schedule.ts +++ b/packages/effect/src/internal/schedule.ts @@ -432,18 +432,10 @@ export const cron = (expression: string | Cron.Cron): Schedule.Schedule<[number, const cron = parsed.right const date = new Date(now) - - let next: number - if (initial && Cron.match(cron, date)) { - next = now - } else { - const result = Cron.next(cron, date) - next = result.getTime() - } - + const next = initial && Cron.match(cron, date) ? now : Cron.next(cron, date).getTime() const start = beginningOfMinute(next) const end = endOfMinute(next) - const interval = Interval.make(start, end) + const interval = initial ? Interval.make(start + 60000, end + 60000) : Interval.make(start, end) return core.succeed([ [false, [next, start, end]], [start, end],