Explicador de expresiones cron
Lee una expresión cron en lenguaje natural, mira sus próximas ejecuciones en cualquier zona horaria y déjala en su forma estándar.
Ejemplos de código
Copia estos ejemplos en tu propio proyecto. Cada uno usa solo la biblioteca estándar del lenguaje, así que no hay nada que instalar.
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')))Qué hace
Lee una expresión cron en lenguaje natural, muestra cuándo se ejecuta la próxima vez en cualquier zona horaria y la ordena en su forma canónica. Admite el cron estándar de cinco campos y el dialecto Quartz o Spring con segundos. Todo se calcula en tu navegador.
Cómo usarla
- Escribe o pega una expresión, como
*/15 9-17 * * MON-FRI. Se entienden atajos como@dailyy@hourly. El campo donde está el cursor se resalta y se explica debajo. - Elige el dialecto: Estándar (cinco campos) o Quartz / Spring (seis o siete, empezando por los segundos).
- Elige la zona horaria en la que leer la planificación y cuántas próximas ejecuciones quieres ver.
- Lee la descripción en palabras sobre el campo de entrada, con las próximas ejecuciones debajo. Los avisos señalan sintaxis que no todos los cron entienden.
- Pulsa Aleatoria o un horario habitual como punto de partida, o cambia a Varias líneas para revisar una expresión por línea.
Ejemplos
@daily → 0 0 * * *
*/15 9-17 * * MON-FRI → Cada 15 minutos, entre las 09:00 y las 17:59, de lunes a viernes
Una expresión Quartz para el segundo lunes de cada mes a mediodía:
0 0 12 ? * MON#2
Conviene saber
- Los cinco campos son minuto, hora, día del mes, mes y día de la semana.
- El cron estándar cuenta el domingo como 0. Quartz y Spring lo cuentan como 1 y necesitan un
?en el campo del día del mes o en el del día de la semana. - Cron se ejecuta según el reloj de la máquina o del planificador donde vive, así que elige esa zona horaria, a menudo UTC.
- Quartz admite
L,Wy#(último día, día laborable más cercano, enésimo día de la semana). - Un campo que no se puede leer se pone en rojo, y el mensaje lo nombra.
- Con un día del mes y un día de la semana a la vez, la tarea se ejecuta cuando coincide cualquiera de los dos, no solo cuando coinciden ambos.
@rebootno tiene horario que listar, y se señalan7como domingo o los caracteres de Quartz?,L,Wy#en el cron estándar.
¿Qué es una expresión cron?
Una expresión cron indica cuándo debe ejecutarse una tarea, en cinco campos: minuto, hora, día del mes, mes y día de la semana. * significa todos los valores, */15 cada 15, 1-5 un rango y 1,15 una lista. Quartz y Spring añaden delante un campo de segundos, a veces un año al final, y admiten extras como L, W y #.
Preguntas frecuentes
¿Qué zona horaria usan las ejecuciones?
La que elijas. Cron sigue el reloj de la máquina o del planificador donde vive: elige esa zona, a menudo UTC, para ver las horas reales.
¿Qué diferencia hay entre estándar y Quartz?
El cron estándar tiene cinco campos y cuenta el domingo como 0. Quartz y Spring tienen seis o siete, empiezan por segundos, cuentan el domingo como 1 y exigen un ? en el campo de día del mes o de día de la semana.
¿Esta herramienta envía mis expresiones a algún sitio?
No. La explicación y las horas de ejecución se calculan en tu navegador. Lo que escribes nunca se envía a nuestros servidores.