https://github.com/cheap-glitch/mi-cron
📆 A microscopic parser for standard cron expressions.
https://github.com/cheap-glitch/mi-cron
cron cron-jobs cron-schedule crontab node-module tiny-modules typescript-module
Last synced: 5 months ago
JSON representation
📆 A microscopic parser for standard cron expressions.
- Host: GitHub
- URL: https://github.com/cheap-glitch/mi-cron
- Owner: cheap-glitch
- License: isc
- Created: 2020-09-24T17:55:53.000Z (over 5 years ago)
- Default Branch: main
- Last Pushed: 2025-04-17T16:34:30.000Z (11 months ago)
- Last Synced: 2025-10-13T22:44:49.001Z (5 months ago)
- Topics: cron, cron-jobs, cron-schedule, crontab, node-module, tiny-modules, typescript-module
- Language: TypeScript
- Homepage: https://npm.im/@cheap-glitch/mi-cron
- Size: 339 KB
- Stars: 19
- Watchers: 1
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# 📆 mi-cron
[](LICENSE)
[](https://github.com/cheap-glitch/mi-cron/releases/latest)
[](https://coveralls.io/github/cheap-glitch/mi-cron)
**mi-cron** is a microscopic ([~1KB minified & gzipped](https://bundlephobia.com/result?p=@cheap-glitch/mi-cron))
parser for [standard cron expressions](https://en.wikipedia.org/wiki/Cron#CRON_expression).
## Features
* Supports the complete standard cron syntax
* Supports some convenient syntax extensions: @-shorthands (`@daily`) and steps (`*/10`)
* Can compute the next scheduled date for a given expression
* Tiny & dependency-free
## Installation
```
npm i @cheap-glitch/mi-cron
```
## Usage
```javascript
const { parseCron } = require('@cheap-glitch/mi-cron');
console.log(parseCron.nextDate('*/5 6-12 3 3 *').toUTCString());
// Wed, 03 Mar 2021 06:00:00
```
## API
### parseCron(exp: string): CronSchedule
Parses a standard cron expression. Supports:
* globs (`*`)
* ranges (`0-30`, `mon-fri`)
* steps (`*/3`, `20-31/2`, `10/5`)
* lists (`1,15`, `0-10,20-30/2`)
* @-shorthands (`@weekly`)
Does NOT support:
* `L`, `W`, `#`, `?`, `H`
* year field
* `@reboot`
Returns an object with all possible values for each field (minutes, hours, days,
months and days of the week), or `undefined` if the expression is invalid (wrong
syntax, unsupported instruction, impossible range, etc).
```javascript
const { parseCron } = require('@cheap-glitch/mi-cron');
console.log(parseCron('*/5 6-10 1,15 * wed'));
// {
// minutes: [0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55],
// hours: [6, 7, 8, 9, 10],
// days: [1, 15],
// months: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12],
// weekDays: [3],
// }
```
### parseCron.nextDate(exp: string | CronSchedule[, from: Date = new Date.now()]): Date
Takes a cron schedule or expression and returns the next date that matches the
schedule, or `undefined` if the expression is invalid. If given a datetime as
the second argument, it will start the computation from this time (otherwise it
will use the current datetime at the moment it's called).
```javascript
const { parseCron } = require('@cheap-glitch/mi-cron');
console.log(parseCron.nextDate('* * * * *', new Date('01 Jan 2020 00:00:00 GMT')).toUTCString());
// Wed, 01 Jan 2020 00:01:00
// Get the next five scheduled dates
const schedule = parseCron('@weekly');
const nextDate = new Date();
for (let i=0; i<5; i++) {
console.log(nextDate = parseCron.nextDate(schedule, nextDate));
}
```
## Changelog
See the full changelog [here](https://github.com/cheap-glitch/devlint/releases).
## Contributing
Contributions are welcomed! Please open an issue before submitting substantial changes.
## Related
* [crontab.guru](https://crontab.guru) – Interactive cron schedule editor
* [Description of the crontab format](https://crontab.guru/crontab.5.html)
* [Best practices for cron](https://www.endpoint.com/blog/2008/12/08/best-practices-for-cron)
## License
ISC