deno icon indicating copy to clipboard operation
deno copied to clipboard

`Deno.cron` Day-of-Week mismatch: Numeric weekdays off by one

Open Hexagon opened this issue 2 years ago • 1 comments

Version: Deno 1.38.5

There is an inconsistency with the numeric representation of weekdays in the Deno.cron function, it is off by one compared to standards.

Expected Behavior:

Based on conventional system cron logic (as detailed in the references listed below), the expression * * * * 3 should denote every minute of every Wednesday. This follows the typical numbering of days where Sunday is 0, Monday is 1, and so forth.

References:

Actual Behavior:

In Deno, the expression * * * * 4 is required to trigger events every minute on Wednesdays. This originates from the Rust crate saffron.

Saffron, as explained in a Cloudflare blog post, is influenced by the (Java) Quartz scheduler's cron parser. Quartz adopts a different standard where the week starts with 1 (Sunday) and ends with 7 (Saturday). This is also documented in saffron issue #19.

Concern:

The main concern is the adoption of Quartz's weekday numbering in Deno, which contradicts the more widely accepted system cron standard (0 for Sunday, 1 for Monday, etc.).

Alternative Solution:

In response to this (and other issues with existing Rust cron implementations), I have created an alternative crate, croner, which aims to align more closely with the standard cron behavior, and extend them with commonly adopted additional features. A detailed comparison between croner and the existing cron and saffron crates can be found at Why Croner instead of Cron or Saffron? (Disclaimer: This comparison is based on my own quick tests, as documentation for the other crates is limited.).

Hexagon avatar Dec 13 '23 14:12 Hexagon

From version 2.0.0, croner defaults to POSIX-style, as it did in 1.0.0, but can optionally switch to Quartz-mode using the builder method .with_alternative_weekdays(). I'd really like to see Deno.cron use POSIX style by default, but have the option to switch to Quartz mode using an option in Deno.cron.

Hexagon avatar Dec 17 '23 00:12 Hexagon

I just noticed that your documentation points to crontab.guru, which uses different weekday numbering compared to Deno.

image

image

Hexagon avatar Mar 24 '24 00:03 Hexagon

Docs are updated.

igorzi avatar Mar 26 '24 16:03 igorzi