Cron Reference
⏲️ Standard cron expression tools.
Usage
📦 Node
Install @lou.codes/cron
as a dependency:
1pnpm add @lou.codes/cron2# or3npm install @lou.codes/cron4# or5yarn add @lou.codes/cron
Import it and use it:
1import { parse, stringify } from "@lou.codes/cron";2
3const cron = parse("1-2,3,4 * 2 8,9 1");4/*5 {6 minutes: [{ from: 1, to: 2 }, 3, 4],7 hours: "*",8 dayOfMonth: 2,9 month: [8, 9],10 dayOfWeek: 111 }12*/13
14stringify(cron); // "1-2,3,4 * 2 8,9 1"15
16// Also works with partials:17stringify({ hours: 13 }); // "* 13 * * *"18
19// Only parses with valid dates:20parse("* * 31 2 *"); // undefined because 2/31 is invalid
🦕 Deno
Import @lou.codes/cron
using the npm:
prefix, and use it directly:
1import { parse, stringify } from "@lou.codes/cron";2
3const cron = parse("1-2,3,4 * 2 8,9 1");4/*5 {6 minutes: [{ from: 1, to: 2 }, 3, 4],7 hours: "*",8 dayOfMonth: 2,9 month: [8, 9],10 dayOfWeek: 111 }12*/13
14stringify(cron); // "1-2,3,4 * 2 8,9 1"15
16// Also works with partials:17stringify({ hours: 13 }); // "* 13 * * *"18
19// Only parses with valid dates:20parse("* * 31 2 *"); // undefined because 2/31 is invalid
🌎 Browser
Import @lou.codes/cron
using esm.sh, and use it directly:
1<script type="module">2 import { parse, stringify } from "https://esm.sh/@lou.codes/cron";3
4 const cron = parse("1-2,3,4 * 2 8,9 1");5 /*6 {7 minutes: [{ from: 1, to: 2 }, 3, 4],8 hours: "*",9 dayOfMonth: 2,10 month: [8, 9],11 dayOfWeek: 112 }13*/14
15 stringify(cron); // "1-2,3,4 * 2 8,9 1"16
17 // Also works with partials:18 stringify({ hours: 13 }); // "* 13 * * *"19
20 // Only parses with valid dates:21 parse("* * 31 2 *"); // undefined because 2/31 is invalid22</script>
Useful links
- 📝 Documentation: TypeDoc generated documentation.
- ⏳ Changelog: List of changes between versions.
- ✅ Tests Coverage: Coveralls page with tests coverage.
To do
Soon a human readable parser will be added, so we can do stuff like:
1readable("* * * * *"); // "Every minute"2readable("5 * * * *"); // "Minute 5 of every hour"3readable("* 5 * * *"); // "Every minute at 5 AM"4readable("* * 5 * *"); // "Every minute at the 5th day of every month"5readable("* * * 5 *"); // "Every minute in May"6readable("* * * * 5"); // "Every minute on Friday"7readable("5 5 5 5 5"); // "At 5:05 AM, the 5th day of May on Friday"
Cron Object
CronObject
1type CronObject: object;
Object that represents the 5 cron expression fields.
See
Type declaration
Member | Type |
---|---|
dayOfMonth | Field <DayOfMonth > |
dayOfWeek | Field <DayOfWeek > |
hour | Field <Hours > |
minute | Field <Minutes > |
month | Field <MonthValue > |
Field<Value>
1type Field<Value>: AllToken | ListField<Value> | ValueOrRangeField<Value>;
Union of AllToken, ValueOrRangeField and ListField that represents a field in a cron expression.
See
Type parameters
Type parameter |
---|
Value extends number |
ListField<Value>
1type ListField<Value>: ReadOnlyArray<ValueOrRangeField<Value>>;
Type that represents a list of values for a cron object field.
See
Type parameters
Type parameter |
---|
Value extends number |
MonthValue
1type MonthValue: Range<1, 12>;
Type that represents values from 1
to 12
for the month cron field.
RangeField<Value>
1type RangeField<Value>: object;
Type that represents a range of values for a cron object field.
Type parameters
Type parameter |
---|
Value extends number |
Type declaration
Member | Type | Description |
---|---|---|
from | Value | Start of the range, must be lower than to . |
to | Value | End of the range, must be higher than from . |
ValueOrRangeField<Value>
1type ValueOrRangeField<Value>: RangeField<Value> | Value;
Union of a set of numbers and a RangeField with that same set of numbers.
Type parameters
Type parameter |
---|
Value extends number |
ALL_TOKEN
1const ALL_TOKEN: "*" = "*";
Token that represents “all” in a cron expression.
DAY_OF_MONTH_NAME
1const DAY_OF_MONTH_NAME: "dayOfMonth" = "dayOfMonth";
Name of a day of month field in the object representation of a cron expression.
DAY_OF_WEEK_NAME
1const DAY_OF_WEEK_NAME: "dayOfWeek" = "dayOfWeek";
Name of a day of week field in the object representation of a cron expression.
FROM_NAME
1const FROM_NAME: "from" = "from";
Range field from
name.
HOUR_NAME
1const HOUR_NAME: "hour" = "hour";
Name of a hour field in the object representation of a cron expression.
MINUTE_NAME
1const MINUTE_NAME: "minute" = "minute";
Name of a minute field in the object representation of a cron expression.
MONTH_NAME
1const MONTH_NAME: "month" = "month";
Name of a month field in the object representation of a cron expression.
TO_NAME
1const TO_NAME: "to" = "to";
Range field to
name.
stringify()
1function stringify(2 cron: Partial<CronObject>,3): undefined | `${string} ${string} ${string} ${string} ${string}`;
Takes a cron object and returns a sting expression.
Parameters
Parameter | Type | Description |
---|---|---|
cron | Partial <CronObject > | Cron object. |
Returns
undefined
| `${string} ${string} ${string} ${string} ${string}`
Cron string expression.
Example
1stringify({}); // "* * * * *"2stringify({ dayOfMonth: 13, month: 10 }); // "* * 13 10 *"3stringify({4 minute: 5,5 dayOfMonth: [10, 11, 13],6 month: { from: 1, to: 10 },7}); // "5 * 10,11,13 1-10 *"8stringify({ month: 2, dayOfMonth: 31 }); // undefined
See
stringifyField()
1function stringifyField(field: Field<number>): FieldString;
Takes a cron object and returns a string expression.
Parameters
Parameter | Type | Description |
---|---|---|
field | Field <number > | Cron object field. |
Returns
Cron string field.
Example
1stringifyField("*"); // "*"2stringifyField(13); // "13"3stringifyField([10, 11, 13]); // "10,11,13"4stringifyField({ from: 1, to: 10 }); // "1-10"
See
stringifyList()
1function stringifyList(2 field: Readonly<Field<number>>,3): Maybe<`${string},${number}` | `${string},${number}-${number}`>;
Turns cron list into a string.
Parameters
Parameter | Type | Description |
---|---|---|
field | Readonly <Field <number >> | List cron object field |
Returns
Maybe
<`${string},${number}` |
`${string},${number}-${number}`>
String list or undefined
if it isn’t a list.
Example
1stringifyList([10, 11, 13]); // "10,11,13"
See
stringifyRange()
1function stringifyRange<Predicated>(2 field: Readonly<Field<Predicated>>,3): Maybe<`${number}-${number}`>;
Turn a cron range into a string.
Type parameters
Type parameter |
---|
Predicated extends number |
Parameters
Parameter | Type | Description |
---|---|---|
field | Readonly <Field <Predicated >> | Cron field to turn into a string. |
Returns
Maybe
<`${number}-${number}`>
String ranged of undefined
if it isn’t a range object.
Example
1parseRange({ from: 1, to: 13 }); // "1-13"
See
Cron String
CronString
1type CronString: `${string} ${string} ${string} ${string} ${string}`;
String cron expression.
FieldString
1type FieldString: AllToken | ListString | ValueOrRangeString;
Union of AllToken, ValueOrRangeString and ListString that represents a field in a cron expression.
See
ListString
1type ListString: `${string}${ListExpressionSeparatorToken}${ValueOrRangeString}`;
Type that represents a list of values for a cron string field.
See
RangeString
1type RangeString: `${number}${RangeExpressionSeparatorToken}${number}`;
Type that represents a range of values for a cron string field.
ValueOrRangeString
1type ValueOrRangeString: RangeString | `${number}`;
Union of a set any number and a RangeString.
ALL_TOKEN
1const ALL_TOKEN: "*" = "*";
Token that represents “all” in a cron expression.
LIST_EXPRESSION_SEPARATOR_TOKEN
1const LIST_EXPRESSION_SEPARATOR_TOKEN: "," = ",";
Token to separate list items in a cron expression.
RANGE_EXPRESSION_SEPARATOR_TOKEN
1const RANGE_EXPRESSION_SEPARATOR_TOKEN: "-" = "-";
Token to separate range values in a cron expression.
normalizeMap
1const normalizeMap: object;
Map from 3 letter aliases to their respective number representations.
Type declaration
Member | Type | Value | Description |
---|---|---|---|
apr | 4 | 4 | April number representation |
aug | 8 | 8 | August number representation |
dec | 12 | 12 | December number representation |
feb | 2 | 2 | February number representation |
fri | 5 | 5 | Friday number representation |
jan | 1 | 1 | January number representation |
jul | 7 | 7 | July number representation |
jun | 6 | 6 | June number representation |
mar | 3 | 3 | March number representation |
may | 5 | 5 | May number representation |
mon | 1 | 1 | Monday number representation |
nov | 11 | 11 | November number representation |
oct | 10 | 10 | October number representation |
sat | 6 | 6 | Saturday number representation |
sep | 9 | 9 | September number representation |
sun | 0 | 0 | Sunday number representation |
thu | 4 | 4 | Thursday number representation |
tue | 2 | 2 | Tuesday number representation |
wed | 3 | 3 | Wednesday number representation |
isValidExpression()
1function isValidExpression(2 string: string,3): string is `${string} ${string} ${string} ${string} ${string}`;
Validates if a string is a cron expression.
Parameters
Parameter | Type |
---|---|
string | string |
Returns
string is `${string} ${string} ${string} ${string} ${string}`
See
normalizeAliases()
1function normalizeAliases(expression: string): FieldString;
Normalizes day and month 3 letter aliases into their number counterparts.
Parameters
Parameter | Type | Description |
---|---|---|
expression | string | String expression. |
Returns
Normalized expression
Example
1normalizeAliases("* * 13 oct fri"); // "* * 13 10 5"
parse()
1function parse(2 expression: `${string} ${string} ${string} ${string} ${string}`,3): Maybe<CronObject>;
Parses a cron expression into an object representation.
Parameters
Parameter | Type | Description |
---|---|---|
expression | `${string} ${string} ${string} ${string} ${string}` | Cron expression to be parsed. |
Returns
Maybe
<CronObject
>
Object representing that expression or undefined
if expression is invalid.
Example
1parse("* * * * *"); // { minute: "*", hour: "*", dayOfMonth: "*", month: "*", dayOfWeek: "*" }2parse("* * 13 10 *"); // { minute: "*", hour: "*", dayOfMonth: 13, month: 10, dayOfWeek: "*" }3parse("5 * 10,11,13 1-10 *"); // { minute: 5, hour: "*", dayOfMonth: [10, 11, 13], month: { from: 1, to: 10 }, dayOfWeek: "*" }4parse("* * 31 2 *"); // undefined5parse("nope"); // undefined
See
parseField()
1function parseField(2 field: string,3): "*" | RangeField<number> | ListField<number> | Maybe<number>;
Parses a cron field.
Parameters
Parameter | Type | Description |
---|---|---|
field | string | Cron field value (should be validated before this). |
Returns
"*"
| RangeField
<number
>
| ListField
<number
> |
Maybe
<number
>
Parsed field.
Example
1parseField("*"); // "*"2parseField("13"); // 133parseField("10,11,13"); // [10, 11, 13]4parseField("1-10"); // { from: 1, to: 10 }
See
parseFieldTuplesMap()
1function parseFieldTuplesMap(2 iterable: Readonly<Iterable<readonly [keyof CronObject, string], any, any>>,3): Readonly<4 IterableIterator<5 readonly [6 "minute" | "hour" | "dayOfMonth" | "month" | "dayOfWeek",7 "*" | RangeField<number> | ListField<number> | Maybe<number>,8 ],9 any,10 any11 >12>;
Given an iterable of tuples with the name of a field and a field value, run each field through parseField.
Parameters
Parameter | Type |
---|---|
iterable | Readonly <Iterable <readonly [keyof CronObject , string ], any , any >> |
Returns
Readonly
<IterableIterator
<readonly [ | "minute"
| "hour"
|
"dayOfMonth"
| "month"
| "dayOfWeek"
, "*"
|
RangeField
<number
> |
ListField
<number
> |
Maybe
<number
>], any
, any
>>
Example
1parseFieldTuplesMap([["minute", "*"]]); // [["minute", "*"]]2parseFieldTuplesMap([["minute", "13"]]); // [["minute", 13]]3parseFieldTuplesMap([["minute", "10,11,13"]]); // [["minute", [10, 11, 13]]]4parseFieldTuplesMap([["minute", "1-10"]]); // [["minute", { from: 1, to: 10 }]]
See
parseList()
1function parseList<Predicated>(value: string): Maybe<ListField<Predicated>>;
Parses a cron list into an array.
Type parameters
Type parameter |
---|
Predicated extends number |
Parameters
Parameter | Type | Description |
---|---|---|
value | string | String that might be a list. |
Returns
Maybe
<ListField
<Predicated
>>
Parsed list of undefined
if it isn’t a list string.
Example
1parseList("10,11,13"); // [10, 11, 13]
See
parseListMap()
1function parseListMap(2 iterable: Readonly<Iterable<string, any, any>>,3): Readonly<IterableIterator<RangeField<number> | Maybe<number>, any, any>>;
Map to parse cron list items (can be either a range or a number).
Parameters
Parameter | Type |
---|---|
iterable | Readonly <Iterable <string , any , any >> |
Returns
Readonly
<IterableIterator
<RangeField
<number
>
| Maybe
<number
>, any
, any
>>
Example
1parseListMap(["1", "05", "13", "5-13", "13-13", "13-5", "99"]);2// [1, 5, 13, { from: 5, to: 13 }, 13, undefined, undefined]
See
parseNumber()
1function parseNumber<Predicated>(value: string): Maybe<Predicated>;
Parses a cron list into an array.
Type parameters
Type parameter |
---|
Predicated extends number |
Parameters
Parameter | Type | Description |
---|---|---|
value | string | String that might be a list. |
Returns
Maybe
<Predicated
>
Parsed list of undefined
if it isn’t a list string.
Example
1parseNumber("5"); // 52parseNumber("13"); // 133parseNumber("59"); // 594parseNumber("60"); // undefined (60 isn't valid for any cron field)
parseNumberMap()
1function parseNumberMap<Predicated>(2 iterable: Readonly<Iterable<string, any, any>>,3): Readonly<IterableIterator<Maybe<Predicated>, any, any>>;
Maps given iterable through parseNumber.
Type parameters
Type parameter |
---|
Predicated extends number |
Parameters
Parameter | Type |
---|---|
iterable | Readonly <Iterable <string , any , any >> |
Returns
Readonly
<IterableIterator
<Maybe
<Predicated
>, any
, any
>>
Example
1parseNumberMap(["05"]); // [5]2parseNumberMap(["13"]); // [13]3parseNumberMap(["59"]); // [59]4parseNumberMap(["60"]); // [undefined] (60 isn't valid for any cron field)
See
parseNumberMatch()
1function parseNumberMatch(text: string): boolean;
Matches only valid number values for a cron expression (from 0
or 00
to
59
).
Parameters
Parameter | Type |
---|---|
text | string |
Returns
boolean
Example
1parseNumberMatch("13"); // true2parseNumberMatch("05"); // true3parseNumberMatch("60"); // false4parseNumberMatch("foo"); // false
See
parseRange()
1function parseRange<Predicated>(2 value: string,3): Maybe<Predicated | RangeField<Predicated>>;
Parses a cron range into an object.
Type parameters
Type parameter |
---|
Predicated extends number |
Parameters
Parameter | Type | Description |
---|---|---|
value | string | String that might be a range. |
Returns
Maybe
<Predicated
|
RangeField
<Predicated
>>
Parsed ranged of undefined
if it isn’t a range string.
Example
1parseRange("1-13"); // { from: 1, to: 13 }2parseRange("13-13"); // 13 (normalized)3parseRange("13-1"); // undefined
See
Internal
fieldNamesTuple
1const fieldNamesTuple: readonly [2 "minute",3 "hour",4 "dayOfMonth",5 "month",6 "dayOfWeek",7];
Field names in order.
compareField()
1function compareField(2 value: number,3 field: ValueOrRangeField<number> | ListField<number>,4): boolean;
Checks if given value is included in given field.
Parameters
Parameter | Type | Description |
---|---|---|
value | number | Value to compare. |
field | ValueOrRangeField <number > | ListField <number > | Field to compare. |
Returns
boolean
true
if value is included in the given field
, false
if it isn’t.
Example
1compareField(13, 13); // true2compareField(13, 99); // false3compareField(13, { from: 0, to: 99 }); // true4compareField(13, { from: 0, to: 10 }); // false5compareField(13, [10, 13]); // true6compareField(13, [10, 11, 12]); // false7compareField(13, [10, { from: 11, to: 99 }]); // true8compareField(13, [5, { from: 10, to: 12 }]); // false
compareRangeOrValue()
1function compareRangeOrValue(2 value: number,3): (valueOrRange: ValueOrRangeField<number>) => boolean;
Compares value
to a
ValueOrRangeField.
Parameters
Parameter | Type | Description |
---|---|---|
value | number | Value to be compared. |
Returns
Function
Curried function expecting a ValueOrRangeField.
Parameters
Parameter | Type |
---|---|
valueOrRange | ValueOrRangeField <number > |
Returns
boolean
Example
1compareRangeOrValue(13)({ from: 0, to: 99 }); // true2compareRangeOrValue(13)({ from: 0, to: 10 }); // false3compareRangeOrValue(13)(13); // true4compareRangeOrValue(13)(14); // false
dateInCron()
1function dateInCron(cron: CronObject): (date: Readonly<Date>) => boolean;
Check if given cron expression object includes given date.
Parameters
Parameter | Type | Description |
---|---|---|
cron | CronObject | Cron object. |
Returns
Function
Curried function with cron
in context.
Parameters
Parameter | Type |
---|---|
date | Readonly <Date > |
Returns
boolean
zipRangeNames()
1function zipRangeNames<ItemSecond>(2 iterableSecond: Readonly<Iterable<ItemSecond, any, any>>,3): Readonly<IterableIterator<readonly ["from" | "to", ItemSecond], any, any>>;
Zips “from” and “to”.
Type parameters
Type parameter |
---|
ItemSecond |
Parameters
Parameter | Type |
---|---|
iterableSecond | Readonly <Iterable <ItemSecond , any , any >> |
Returns
Readonly
<IterableIterator
<readonly ["from"
| "to"
, ItemSecond
],
any
, any
>>
Other
parseDecimalMap()
1function parseDecimalMap<Predicated>(2 iterable: Readonly<Iterable<string, any, any>>,3): Readonly<IterableIterator<Maybe<Predicated>, any, any>>;
Type parameters
Type parameter |
---|
Predicated extends number |
Parameters
Parameter | Type |
---|---|
iterable | Readonly <Iterable <string , any , any >> |
Returns
Readonly
<IterableIterator
<Maybe
<Predicated
>, any
, any
>>
Deprecated
Use parseNumberMap instead.
Predicate
isAllToken()
1function isAllToken(actual: unknown): actual is "*";
Predicate to check if the given value is "*"
.
Parameters
Parameter | Type |
---|---|
actual | unknown |
Returns
actual is "*"
isListField()
1function isListField(value: Field<number>): value is ListField<number>;
Predicate checking if given value is a ListField.
Parameters
Parameter | Type |
---|---|
value | Field <number > |
Returns
value is ListField<number>
See
isListString()
1function isListString(2 value: string,3): value is `${string},${number}` | `${string},${number}-${number}`;
Predicate checking if given value is a ListString.
Parameters
Parameter | Type |
---|---|
value | string |
Returns
value is `${string},${number}` | `${string},${number}-${number}`
See
isNumberString()
1function isNumberString<Value>(input: string): input is `${Value}`;
Predicate checking if given value is a number.
Type parameters
Type parameter |
---|
Value extends number |
Parameters
Parameter | Type |
---|---|
input | string |
Returns
input is `${Value}`
isRangeField()
1function isRangeField(value: unknown): value is RangeField<number>;
Predicate checking if given value is a cron object range (RangeField).
Parameters
Parameter | Type |
---|---|
value | unknown |
Returns
value is RangeField<number>
See
isRangeString()
1function isRangeString(value: string): value is `${number}-${number}`;
Predicate checking if given value is a cron string range (RangeString).
Parameters
Parameter | Type |
---|---|
value | string |
Returns
value is `${number}-${number}`
See
Regular Expression
cronRegExp
1const cronRegExp: "^\s(?!(?:\S+\s+){2}(?:(?:(?:301?|(?:(?:301?,)+301?))\s+(?:(?:0?2|feb)(?:-(?:0?2|feb))?|(?:(?:(?:0?2|feb)(?:-(?:0?2|feb))?,)+(?:0?2|feb)(?:-(?:0?2|feb))?)))|(?:(?:31(?:-31)?|(?:(?:31(?:-31)?,)+31(?:-31)?))\s+(?:(?:0?[2469]|11|feb|apr|jun|sep|nov)|(?:(?:(?:0?[2469]|11|feb|apr|jun|sep|nov),)+(?:0?[2469]|11|feb|apr|jun|sep|nov)))))\s+\S+)(?<minute>*|(?:(?:0?\d|[1-5]\d)(?:-(?:0?\d|[1-5]\d))?|(?:(?:(?:0?\d|[1-5]\d)(?:-(?:0?\d|[1-5]\d))?,)+(?:0?\d|[1-5]\d)(?:-(?:0?\d|[1-5]\d))?)))\s+(?<hour>*|(?:(?:0?\d|1\d|20-3)(?:-(?:0?\d|1\d|20-3))?|(?:(?:(?:0?\d|1\d|20-3)(?:-(?:0?\d|1\d|20-3))?,)+(?:0?\d|1\d|20-3)(?:-(?:0?\d|1\d|20-3))?)))\s+(?<dayOfMonth>*|(?:(?:0?[1-9]|[12]\d|3[01])(?:-(?:0?[1-9]|[12]\d|3[01]))?|(?:(?:(?:0?[1-9]|[12]\d|3[01])(?:-(?:0?[1-9]|[12]\d|3[01]))?,)+(?:0?[1-9]|[12]\d|3[01])(?:-(?:0?[1-9]|[12]\d|3[01]))?)))\s+(?<month>*|(?:(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec|0?[1-9]|1[0-2])(?:-(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec|0?[1-9]|1[0-2]))?|(?:(?:(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec|0?[1-9]|1[0-2])(?:-(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec|0?[1-9]|1[0-2]))?,)+(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec|0?[1-9]|1[0-2])(?:-(?:jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec|0?[1-9]|1[0-2]))?)))\s+(?<dayOfWeek>*|(?:(?:sun|mon|tue|wed|thu|fri|sat|0?[0-6])(?:-(?:sun|mon|tue|wed|thu|fri|sat|0?[0-6]))?|(?:(?:(?:sun|mon|tue|wed|thu|fri|sat|0?[0-6])(?:-(?:sun|mon|tue|wed|thu|fri|sat|0?[0-6]))?,)+(?:sun|mon|tue|wed|thu|fri|sat|0?[0-6])(?:-(?:sun|mon|tue|wed|thu|fri|sat|0?[0-6]))?)))\s$";
Regular expression to test for valid cron expressions.
Remarks
- We allow 0 or more whitespace before and after the expression.
- Negative lookahead to avoid impossible matches:
- 30 or 31 of February (Any combination like 30,31; 30-31; 30-30; etc.)
- 31 of February, April, Jun, September or November (also any combination).
- Then we start capturing each field in a named group (separated with any amount
of whitespace): -
minute
: Digits from0
to59
(including padded like05
). -hour
: Digits from0
to23
(also including padded). -dayOfMonth
: Digits from0
to31
(also including padded). -month
: Digits from1
to12
(also including padded, and 3 letter aliases likeoct
). -dayOfWeek
: Digits from0
to6
(all padded, and also including 3 letter aliases likefri
).
Example
1new RegExp(cronRegExp).test("* * * * *"); // true2new RegExp(cronRegExp).test("nope"); // false3new RegExp(cronRegExp).test("* * 31 2 *"); // false4new RegExp(cronRegExp).test("* * 31 feb,4,6 *"); // false5new RegExp(cronRegExp).test("* * 31 feb,mar *"); // true6new RegExp(cronRegExp).test("1 2 3 4 5"); // true
fieldRegExp()
1function fieldRegExp<Name, Value>(name: Name, value: Value): (?<${Name}>*|(?:${Value}(?:-${Value})?|(?:(?:${Value}(?:-${Value})?,)+${Value}(?:-${Value})?)))
Regular expression to match a cron expression field.
Type parameters
Type parameter |
---|
Name extends string |
Value extends string |
Parameters
Parameter | Type | Description |
---|---|---|
name | Name | Named group name. |
value | Value | Possible values the expression can have. |
Returns
(?<${Name}>\*|(?:${Value}(?:-${Value})?|(?:(?:${Value}(?:-${Value})?,)+${Value}(?:-${Value})?)))
Named group capturing the given value by itself, in a list or range.
Example
1fieldRegExp("example", 13); // "(?<example>\\*|(?:13(?:-13)?|(?:(?:13(?:-13)?,)+13(?:-13)?)))"
paddedRegExp()
1function paddedRegExp<Value>(value: Value): `0?${Value}`;
Regular expression to match field with an optional 0
to it’s left.
Type parameters
Type parameter |
---|
Value extends string | number |
Parameters
Parameter | Type | Description |
---|---|---|
value | Value | Value to pad. |
Returns
`0?${Value}`
RegExp to match value with padded 0
.
Example
1paddedRegExp(5); // "0?5"
rangeStringMatch()
1function rangeStringMatch(text: string): boolean;
Regular expression to test if given string is a range.
Parameters
Parameter | Type |
---|---|
text | string |
Returns
boolean
valueOrListRegExp()
1function valueOrListRegExp<Value>(2 value: Value,3): `(?:${Value}|(?:(?:${Value},)+${Value}))`;
Regular expression to match lists.
Type parameters
Type parameter |
---|
Value extends string | number |
Parameters
Parameter | Type | Description |
---|---|---|
value | Value | Value to match by itself or as a list. |
Returns
`(?:${Value}|(?:(?:${Value},)+${Value}))`
RegExp to match value or list.
Example
1valueOrListRegExp(13); // "(?:13|(?:(?:13,)+13))"
valueOrRangeRegExp()
1function valueOrRangeRegExp<Value>(value: Value): `${Value}(?:-${Value})?`;
Regular expression to match values or ranges.
Type parameters
Type parameter |
---|
Value extends string | number |
Parameters
Parameter | Type | Description |
---|---|---|
value | Value | Value to match by itself or as a range. |
Returns
`${Value}(?:-${Value})?`
RegExp to match value or range.
Example
1valueOrRangeRegExp(13); // "13(?:-13)?"
valueRangeOrListRegExp()
1function valueRangeOrListRegExp<Value>(2 value: Value,3): `(?:${Value}(?:-${Value})?|(?:(?:${Value}(?:-${Value})?,)+${Value}(?:-${Value})?))`;
Regular expression to match values, ranges or lists.
Type parameters
Type parameter |
---|
Value extends string | number |
Parameters
Parameter | Type | Description |
---|---|---|
value | Value | Value to match by itself, as a range or as a list. |
Returns
`(?:${Value}(?:-${Value})?|(?:(?:${Value}(?:-${Value})?,)+${Value}(?:-${Value})?))`
RegExp to match value, range or list.
Example
1valueRangeOrListRegExp(13); // "(?:13(?:-13)?|(?:(?:13(?:-13)?,)+13(?:-13)?))"
Token
AllToken
1type AllToken: typeof ALL_TOKEN;
Type to represent the “all” token ("*"
).
ListExpressionSeparatorToken
1type ListExpressionSeparatorToken: typeof LIST_EXPRESSION_SEPARATOR_TOKEN;
Type to represent the “list expression separator” token (","
).
RangeExpressionSeparatorToken
1type RangeExpressionSeparatorToken: typeof RANGE_EXPRESSION_SEPARATOR_TOKEN;
Type to represent the “range expression separator” token ("-"
).
Util
nextDate()
1function nextDate(2 date: Readonly<Date>,3): (4 cron:5 | `${string} ${string} ${string} ${string} ${string}`6 | Partial<CronObject>,7) => Maybe<Date>;
Get next ISO date string for the given date and the given cron expression.
Parameters
Parameter | Type | Description |
---|---|---|
date | Readonly <Date > | Base date to get the next date from. |
Returns
Function
Curried function with date set.
Parameters
Parameter | Type |
---|---|
cron | `${string} ${string} ${string} ${string} ${string}` | Partial <CronObject > |
Returns
Maybe
<Date
>
Example
1nextDate(new Date("1989-10-13T10:15:00.000"))("* * * * *"); // Date("1989-10-13T10:16:00.000")
nextDates()
1function nextDates(2 date: Readonly<Date>,3): (4 cron:5 | `${string} ${string} ${string} ${string} ${string}`6 | Partial<CronObject>,7) => Readonly<IterableIterator<Date, any, any>>;
Get next ISO date iterator for the given date and the given cron expression.
Parameters
Parameter | Type | Description |
---|---|---|
date | Readonly <Date > | Base date to get the next date from. |
Returns
Function
Curried function with date set.
Parameters
Parameter | Type |
---|---|
cron | `${string} ${string} ${string} ${string} ${string}` | Partial <CronObject > |
Returns
Readonly
<IterableIterator
<Date
, any
, any
>>
Example
1take(2)(nextDates(new Date("1989-10-13T10:15:00.000Z"))("* * * * *"));2// [Date("1989-10-13T10:16:00.000"), Date("1989-10-13T10:17:00.000Z")]