Cron-expressie uitlegger
Lees een cron-expressie in gewone taal, zie de volgende uitvoeringen in elke tijdzone en breng hem terug naar de standaardvorm.
Codevoorbeelden
Kopieer deze voorbeelden naar je eigen project. Ze gebruiken alleen de standaardbibliotheek van de taal, dus er hoeft niets geïnstalleerd te worden.
const expand = (field, min, max) =>
field.split(',').flatMap((part) => {
const [range, step = '1'] = part.split('/')
const [from, to = from] = range === '*' ? [min, max] : range.split('-').map(Number)
return Array.from({ length: Math.floor((to - from) / Number(step)) + 1 }, (_, i) => from + i * Number(step))
})
function matches(expression, instant) {
const [minute, hour, dayOfMonth, month, dayOfWeek] = expression.split(' ')
const inMonth = expand(dayOfMonth, 1, 31).includes(instant.getUTCDate())
const inWeek = expand(dayOfWeek, 0, 7).some((day) => day % 7 === instant.getUTCDay())
const dayMatches =
!dayOfMonth.startsWith('*') && !dayOfWeek.startsWith('*') ? inMonth || inWeek : inMonth && inWeek
return (
expand(minute, 0, 59).includes(instant.getUTCMinutes()) &&
expand(hour, 0, 23).includes(instant.getUTCHours()) &&
expand(month, 1, 12).includes(instant.getUTCMonth() + 1) &&
dayMatches
)
}
console.log(matches('*/15 9-17 * * 1-5', new Date('2023-11-14T09:30:00Z')))Wat het doet
Lees een cron-expressie in gewone taal, zie wanneer die de volgende keer draait in elke tijdzone en maak er de canonieke vorm van. Het begrijpt standaard cron met vijf velden en het Quartz- of Spring-dialect met seconden. Alles wordt in je browser berekend.
Zo gebruik je het
- Typ of plak een expressie, zoals
*/15 9-17 * * MON-FRI. Snelkoppelingen zoals@dailyen@hourlyworden begrepen. Het veld waar je cursor staat, wordt gemarkeerd en eronder uitgelegd. - Kies het dialect: Standaard (5 velden) of Quartz / Spring (zes of zeven velden, beginnend met seconden).
- Kies de tijdzone waarin je het schema leest en hoeveel komende uitvoeringen je wilt zien.
- Lees de beschrijving in woorden boven het invoerveld, met de volgende uitvoertijden eronder. Waarschuwingen wijzen op syntaxis die niet elke cron begrijpt.
- Kies Willekeurig of een schema-chip als beginpunt, of schakel naar Meerdere regels om één expressie per regel te controleren.
Voorbeelden
@daily → 0 0 * * *
*/15 9-17 * * MON-FRI → Elke 15 minuten, tussen 09:00 en 17:59, van maandag tot en met vrijdag
Een Quartz-expressie voor twaalf uur ’s middags op de tweede maandag van elke maand:
0 0 12 ? * MON#2
Goed om te weten
- De vijf velden zijn minuut, uur, dag van de maand, maand en dag van de week.
- Standaard cron telt zondag als 0. Quartz en Spring tellen het als 1 en vereisen een
?in het veld voor de dag van de maand of de dag van de week. - Cron draait op de klok van de machine of planner waarop het staat, dus kies die tijdzone, vaak UTC.
- Quartz
L,Wen#(laatste dag, dichtstbijzijnde werkdag, n-de weekdag) worden ondersteund. - Een veld dat niet te lezen is, wordt rood en de melding noemt het.
- Met zowel een dag van de maand als een dag van de week draait de taak zodra één van beide klopt, niet pas als allebei kloppen.
@rebootheeft geen schema om op te sommen, en7als zondag of de Quartz-tekens?,L,Wen#in standaard cron worden gemarkeerd.
Wat is een cron-expressie?
Een cron-expressie zegt wanneer een taak moet draaien, in vijf velden: minuut, uur, dag van de maand, maand en dag van de week. * betekent elke waarde, */15 elke 15e, 1-5 een bereik en 1,15 een lijst. Quartz en Spring voegen vooraan een secondenveld toe en soms achteraan een jaar, en kennen extra's als L, W en #.
Veelgestelde vragen
Welke tijdzone gebruiken de uitvoeringen?
Die je kiest. Cron draait op de klok van de machine of planner waarop het staat; kies die zone, vaak UTC, om de echte uitvoertijden te zien.
Wat is het verschil tussen standaard en Quartz?
Standaard cron heeft vijf velden en telt zondag als 0. Quartz en Spring hebben er zes of zeven, beginnen met seconden, tellen zondag als 1 en vragen een ? in het dag-van-de-maand- of het dag-van-de-week-veld.
Stuurt deze tool mijn expressies ergens naartoe?
Nee. De uitleg en de uitvoertijden worden in je browser berekend. Wat je typt wordt nooit naar onze servers gestuurd.