Explicador de expressões cron
Leia uma expressão cron em linguagem natural, veja as próximas execuções em qualquer fuso horário e deixe-a na forma padrão.
Exemplos de código
Copie estes exemplos para o seu próprio projeto. Cada um usa apenas a biblioteca padrão da linguagem, por isso não há nada para 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')))O que faz
Leia uma expressão cron em linguagem natural, veja quando ela roda em qualquer fuso horário e deixe-a na forma canônica. Funciona com o cron padrão de cinco campos e com o dialeto Quartz ou Spring, que tem segundos. Tudo é calculado no seu navegador.
Como usar
- Digite ou cole uma expressão, como
*/15 9-17 * * MON-FRI. Atalhos como@dailye@hourlysão entendidos. O campo onde está o cursor é destacado e explicado abaixo. - Escolha o dialeto: Padrão (5 campos) ou Quartz / Spring (seis ou sete, começando pelos segundos).
- Escolha o fuso horário para ler o agendamento e quantas execuções futuras listar.
- Leia a descrição em palavras acima do campo, com os próximos horários de execução abaixo. Os avisos apontam sintaxe que nem todo cron entende.
- Use Aleatória ou uma agenda comum como ponto de partida, ou mude para Várias linhas para conferir uma expressão por linha.
Exemplos
@daily → 0 0 * * *
*/15 9-17 * * MON-FRI → A cada 15 minutos, entre 09:00 e 17:59, de segunda a sexta-feira
Uma expressão Quartz para o meio-dia da segunda segunda-feira de cada mês:
0 0 12 ? * MON#2
Bom saber
- Os cinco campos são minuto, hora, dia do mês, mês e dia da semana.
- O cron padrão conta o domingo como 0. Quartz e Spring contam como 1 e exigem um
?no campo do dia do mês ou do dia da semana. - O cron roda pelo relógio da máquina ou do agendador onde ele vive, então escolha esse fuso horário, muitas vezes UTC.
- Os
L,We#do Quartz (último dia, dia útil mais próximo, enésimo dia da semana) são suportados. - Um campo que não pode ser lido fica vermelho, e a mensagem o nomeia.
- Com um dia do mês e um dia da semana ao mesmo tempo, a tarefa roda quando qualquer um dos dois coincide, não só quando os dois coincidem.
@rebootnão tem agenda para listar, e7como domingo ou os caracteres do Quartz?,L,We#no cron padrão são sinalizados.
O que é uma expressão cron?
Uma expressão cron diz quando uma tarefa deve rodar, em cinco campos: minuto, hora, dia do mês, mês e dia da semana. * significa todos os valores, */15 a cada 15, 1-5 um intervalo e 1,15 uma lista. Quartz e Spring adicionam um campo de segundos na frente, às vezes um ano no fim, e aceitam extras como L, W e #.
Perguntas frequentes
Que fuso horário as execuções usam?
O que você escolher. O cron segue o relógio da máquina ou do agendador onde roda: escolha esse fuso, muitas vezes UTC, para ver os horários reais.
Qual a diferença entre padrão e Quartz?
O cron padrão tem cinco campos e conta o domingo como 0. Quartz e Spring têm seis ou sete, começam por segundos, contam o domingo como 1 e exigem um ? no campo de dia do mês ou de dia da semana.
Esta ferramenta envia minhas expressões para algum lugar?
Não. A explicação e os horários de execução são calculados no seu navegador. O que você digita nunca é enviado aos nossos servidores.