Oh MyUtils

Cron表达式解析器和构建器 - Crontab Guru替代工具

可视化解析、说明和构建Cron表达式。查看下次执行时间,获取人类可读描述,在线验证crontab语法。

常见问题

什么是Cron表达式?

Cron表达式是由5-7个字段组成的字符串,用于表示任务执行的调度计划。最初用于Unix类系统中的cron作业调度,现在这种语法已广泛用于云服务(AWS、Azure、GCP)、CI/CD流水线和应用程序框架。每个字段指定任务应在何时运行:分钟、小时、月中日期、月份和星期几。

如何使用这个Cron解析器工具?

在输入框中输入您的cron表达式(例如:0 9 * * 1-5)。工具会立即解析并显示人类可读的描述和下一次计划执行时间。使用预设下拉菜单可快速选择常见调度。切换到“构建”标签页,通过为每个字段选择值来可视化地创建表达式。

我的Cron表达式数据安全吗?

是的。您的cron表达式100%安全,永远不会离开您的浏览器。所有解析和计算都使用JavaScript在客户端执行。没有任何数据传输到服务器,因此您可以安全地测试任何调度模式。

标准cron格式和扩展cron格式有什么区别?

标准Unix cron使用5个字段:分钟、小时、月中日期、月份和星期几。扩展格式在开头添加了秒字段,总共有6个字段。某些系统如Quartz(Java)使用7字段格式,还包括年份。本工具同时支持标准5字段和扩展6字段格式。

为什么有两个日期字段(月中日期和星期几)?

您可以指定其中一个或两个都指定。当两个字段都指定了非通配符值时,任务会在任一条件满足时执行(而非两者都满足)。例如,'0 9 15 * 1'表示'每月15日上午9点或每周一上午9点' — 而不是'15日且为周一时的上午9点'。

如何创建“每5分钟”的cron表达式?

使用 */5 * * * *。/5表示“每第5个值”。类似地,*/15 * * * * 每15分钟执行一次,0 */2 * * * 每2小时在第0分钟执行一次。

Cron使用哪个时区?

默认情况下,cron使用系统的本地时区。在云服务中,通常可以指定时区。本工具以您浏览器的本地时区显示下一次执行时间。

代码示例

// Simple cron expression parser
function parseCronExpression(expression) {
  const parts = expression.trim().split(/\s+/);
  if (parts.length !== 5) {
    throw new Error('Invalid cron expression: expected 5 fields');
  }

  const [minute, hour, dayOfMonth, month, dayOfWeek] = parts;

  function parseField(field, min, max) {
    if (field === '*') {
      return Array.from({ length: max - min + 1 }, (_, i) => min + i);
    }
    const values = new Set();
    field.split(',').forEach(part => {
      if (part.includes('/')) {
        const [range, step] = part.split('/');
        const stepNum = parseInt(step, 10);
        let start = min, end = max;
        if (range !== '*' && range.includes('-')) {
          [start, end] = range.split('-').map(Number);
        }
        for (let i = start; i <= end; i += stepNum) values.add(i);
      } else if (part.includes('-')) {
        const [start, end] = part.split('-').map(Number);
        for (let i = start; i <= end; i++) values.add(i);
      } else {
        values.add(parseInt(part, 10));
      }
    });
    return Array.from(values).sort((a, b) => a - b);
  }

  return {
    minute: parseField(minute, 0, 59),
    hour: parseField(hour, 0, 23),
    dayOfMonth: parseField(dayOfMonth, 1, 31),
    month: parseField(month, 1, 12),
    dayOfWeek: parseField(dayOfWeek, 0, 6),
  };
}

// Example usage
const expr = '0 9 * * 1-5';
console.log('Parsed:', parseCronExpression(expr));

相关工具