Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cron.matchDate returns always true when using weekdays and days of month #270

Closed
ghost opened this issue Apr 26, 2022 · 3 comments · Fixed by #271
Closed

Cron.matchDate returns always true when using weekdays and days of month #270

ghost opened this issue Apr 26, 2022 · 3 comments · Fixed by #271
Labels

Comments

@ghost
Copy link

ghost commented Apr 26, 2022

Because of this line in matchDate: (this.days.indexOf(day) !== -1 || this.weekdays.indexOf(weekday) !== -1) an expression like * * * * * 0,6 (Only on Saturday's or Sunday's) will always return true since indexOf(day) will always return true. I believe correct would be using logical AND instead of OR.

Thanks for the package, just what I was looking for. This behaviour is not hard to overwrite, just letting you know 👍

Ref:

(this.days.indexOf(day) !== -1 || this.weekdays.indexOf(weekday) !== -1)

@P4sca1
Copy link
Owner

P4sca1 commented Apr 27, 2022

Hello @renzo-s 👋

Thank you for your feedback. The expression 0-6 in the weekdays field will not result in only Saturdays or sundays, but will allow any weekday between 0 (Sunday) and 6 (Saturday), which includes 1 (Monday), 2 (Tuesday), …, which at the end is every weekday.
If you only want to include Sunday and Saturday, use 0,6 instead (comma instead of dash).

The logic that either day of month or weekday needs to match, comes from this note from crontab.org:

Note: The day of a command's execution can be specified by two fields -- day of month, and day of week. If both fields are restricted (ie, aren't *), the command will be run when either field matches the current time.

So you are right, that this check is wrong, when one of the fields is not restricted.

@ghost
Copy link
Author

ghost commented Apr 27, 2022

Hi Pascal, 🙈 damn that was a silly typo. I'm using 0,6 not 0-6 (edited now). Sorry for the confusion. Thanks for the quick reply.

Ah, thanks for the spec note, now the brackets and the OR make sense. This just needs another * check 👌

P4sca1 pushed a commit that referenced this issue Apr 27, 2022
…er weekday or day of month is unrestricted (#271)

* resolves #270

* resolves #270

Co-authored-by: Renzo Sartorius <[email protected]>
P4sca1 pushed a commit that referenced this issue Apr 27, 2022
## [3.0.6](v3.0.5...v3.0.6) (2022-04-27)

### Bug Fixes

* cron.matchDate always returning true for day of month, when either weekday or day of month is unrestricted ([#271](#271)) ([8ebd6a6](8ebd6a6)), closes [#270](#270) [#270](#270)
@P4sca1
Copy link
Owner

P4sca1 commented Apr 27, 2022

🎉 This issue has been resolved in version 3.0.6 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
1 participant