cRonstrue is a JavaScript library that parses a cron expression and outputs a human readable description of the cron schedule. For example, given the expression "*/5 * * * *" it will output "Every 5 minutes".
This library was ported from the original C# implementation called cron-expression-descriptor and is also available in a few other languages.
- Zero dependencies
- Supports all cron expression special characters including * / , - ? L W, #
- Supports 5, 6 (w/ seconds or year), or 7 (w/ seconds and year) part cron expressions
- Supports Quartz Job Scheduler cron expressions
- i18n support with 27 languages
A demo is available here.
cRonstrue is exported as an UMD module so it will work in an AMD, CommonJS or browser global context.
First, install the module:
npm install cronstrue
Then, depending upon your usage context, add a reference to it:
var cronstrue = require('cronstrue');
import cronstrue from 'cronstrue';
The cronstrue.min.js
file from the /dist
folder in the npm package should be served to the browser. There are no dependencies so you can simply include the library in a <script>
tag.
<script src="cronstrue.min.js" type="text/javascript"></script>
<script>
var cronstrue = window.cronstrue;
</script>
A simple way to load the library in a browser is by using the unpkg CDN, which is a "fast, global content delivery network for everything on npm". To use it, include a script tag like this in your file:
<script src="https://unpkg.com/cronstrue@latest/dist/cronstrue.min.js" async></script>
Using the "latest" tag will result in a 302 redirect to the latest version tag so it is highly recommended to use a specific version tag such as https://unpkg.com/[email protected]/dist/cronstrue.min.js to avoid this redirect.
cronstrue.toString("* * * * *");
> "Every minute"
cronstrue.toString("0 23 ? * MON-FRI");
> "At 11:00 PM, Monday through Friday"
cronstrue.toString("0 23 * * *", { verbose: true });
> "At 11:00 PM, every day"
cronstrue.toString("23 12 * * SUN#2");
> "At 12:23 PM, on the second Sunday of the month"
cronstrue.toString("23 14 * * SUN#2", { use24HourTimeFormat: true });
> "At 14:23, on the second Sunday of the month"
cronstrue.toString("* * * ? * 2-6/2", { dayOfWeekStartIndexZero: false });
> "Every second, every 2 days of the week, Monday through Friday"
cronstrue.toString("* * * 6-8 *", { monthStartIndexZero: true });
> "Every minute, July through September"
For more usage examples, including a demonstration of how cRonstrue can handle some very complex cron expressions, you can reference the unit tests.
An options object can be passed as the second parameter to cronstrue.toString
. The following options are available:
- throwExceptionOnParseError: boolean - If exception occurs when trying to parse expression and generate description, whether to throw or catch and output the Exception message as the description. (Default: true)
- verbose: boolean - Whether to use a verbose description (Default: false)
- dayOfWeekStartIndexZero: boolean - Whether to interpret cron expression DOW
1
as Sunday or Monday. (Default: true) - monthStartIndexZero: boolean - Wether to interpret January as
0
or1
. (Default: false) - use24HourTimeFormat: boolean - If true, descriptions will use a 24-hour clock (Default: false but some translations will default to true)
- locale: string - The locale to use (Default: "en")
To use the i18n support cRonstrue provides, you can import a specific locale and then call toString()
. For example, for the es (Spanish) locale:
import cronstrue from 'cronstrue/locales/es';
cronstrue.toString("*/5 * * * *");
A locale file from the /locales
folder in the npm package should be served to the browser.
<script src="https://unpkg.com/cronstrue@latest/locales/es.min.js" async></script>
<script>
cronstrue.toString("*/5 * * * *");
</script>
Alternatively you can import all locales and then pass in the locale
option:
import cronstrue from 'cronstrue/i18n';
cronstrue.toString("*/5 * * * *", { locale: "es" });
The cron expression I am passing in is not valid and this library is giving strange output. What should I do?
This library does not do full validation of cron expressions and assumes the expression passed in is valid. If you need to validate an expression consider using a library like cron-validator or cron-parser.
Can cRonstrue output the next occurrence of the cron expression?
No, cRonstrue does not support this. It simply describes a cron expression. You could use another library to get the next occurrence of a cron expression and then pass that expression into cRonstrue, to achieve this.
- en - English (Brady Holt)
- ca - Catalan (Francisco Javier Barrena)
- cs - Czech (hanbar)
- es - Spanish (Ivan Santos)
- da - Danish (Rasmus Melchior Jacobsen)
- de - German (Michael Schuler)
- fi - Finnish (Mikael Rosenberg)
- fr - French (Arnaud TAMAILLON)
- fa - Farsi (A. Bahrami)
- he - Hebrew (Ilan Firsov)
- it - Italian (rinaldihno)
- id - Indonesia (Hasan Basri)
- ja - Japanese (Alin Sarivan)
- ko - Korean (Ion Mincu)
- nb - Norwegian (Siarhei Khalipski)
- nl - Dutch (TotalMace)
- pl - Polish (foka)
- pt_BR - Portuguese (Brazil) (Renato Lima)
- ro - Romanian (Illegitimis)
- ru - Russian (LbISS)
- sk - Slovakian (hanbar)
- sl - Slovenian (Jani Bevk)
- sw - Swahili (Leylow Lujuo)
- sv - Swedish (roobin)
- tr - Turkish (Mustafa SADEDİL)
- uk - Ukrainian (Taras)
- zh_CN - Chinese (Simplified) (Star Peng)
- zh_TW - Chinese (Traditional) (Ricky Chiang)
- be - Belarusian (Kirill Mikulich)
cRonstrue is freely distributable under the terms of the MIT license.