使用方法
- 在「Cron 表达式」框填入 5 段式定时规则(默认 0 9 * * 1),段间用空格分隔,顺序为 分、时、日、月、周。
- 在「参考起始时间」选一个起点(默认 2026-01-01T00:00),页面会用它向前逐分钟模拟,收集最早 5 个命中时刻。
- 点「解析表达式」或裸按 Enter,结果区先给出每段的逐字段中文含义与「合法 / 非法」判定,再列出未来 5 次运行。
- 若某段超出范围、出现非数字,或字段数不是 5,结果区会改为在错误条里给出具体到哪一段、为什么不合法。
- 点「复制结果」把整段解析结论存到剪贴板,方便贴进文档或工单。
这个工具能解决什么问题
一是把「天书一样的 Cron」翻译成人话。Cron表达式解析工具帮运维和开发把别人写的 0 9 * * 1、*/15 * * * * 一眼看不出是「每周一 9 点」还是「每 15 分钟一次」的表达式展开成中文,避免误判导致任务在错误时间触发。
二是提前发现非法表达式。一个 0 60 * * *(分钟 60)、* * * *(只有 4 段)在多数调度器里会直接报错或静默不跑。本工具在解析阶段就逐段校验取值区间,并指出是第几段越界,省去你在服务器上反复试错。
三是用固定参考时间给出可复现的「下一次」。很多在线解析器依赖「当前时间」,结果随时在变、无法写入文档。本工具把参考时间硬编码为 2026-01-01 00:00,示例永远输出同一组未来时刻,适合做教程、测试用例与 PR 说明。
本页不做这些事:不解析 6 段(含秒)或含宏(@daily)的非标准 Cron;不支持月份/星期用 JAN、MON 等英文别名;也不连接任何真实调度器去真正下发任务。它只解析、校验并模拟展示。
计算原理:五段字段的语法与匹配语义
字段顺序与范围:标准 Vixie Cron 为 5 段——分(0–59) 时(0–23) 日(1–31) 月(1–12) 周(0–7)。第 5 段中 0 与 7 都表示周日,本工具两者都接受,匹配时统一归一为 0(JS 的 getDay() 返回 0–6)。
单段语法:* 表示该段所有合法值;*/n 表示步长 n(如 */15 取 0,15,30,45);a-b 表示闭区间;a-b/n 表示区间内每 n 取一个;a,b,c 为列表求并集;单值 a 只取该数。解析时对每段先按逗号拆列表,再对每部分处理区间与步长,最后合并成允许值集合并校验是否越界。
日与周的 OR 语义:当「日」和「周」两段同时被限制(都不是 *)时,约定为「或」——命中任意一段即触发;其中一段为 * 时只看另一段;两段都是 * 则每天匹配。本工具据此判断某分钟是否命中。
未来时刻模拟:从参考时间起,逐分钟把日期代入「分、时、月」硬约束与「日/周」OR 约束,命中即记录,直到收集满 5 个或模拟满 5 年(约 263 万分钟)为止。5 年内无命中则提示「未来 5 年内无匹配」。逐分钟而非跳步是为保证不漏掉任何合法点。
完整示例(默认输入实测)
示例与页面默认值完全一致:表达式 0 9 * * 1,参考时间 2026-01-01 00:00(星期四)。逐项核对:
- 分 = 0 → 每小时的第 0 分钟(整点);
- 时 = 9 → 第 9 小时;
- 日 = * → 每天;
- 月 = * → 每月;
- 周 = 1 → 每周一(且日段为 *,只看周一);
- 合法性:五段均在范围内,合法;
- 未来 5 次:2026-01-05 09:00、2026-01-12 09:00、2026-01-19 09:00、2026-01-26 09:00、2026-02-02 09:00(均为周一 9 点)。
这组数字与结果区、上方默认输出完全一致;把表达式改成 */15 * * * *,未来 5 次会变成 00:00、00:15、00:30、00:45、01:00,可在结果区验证。
输入范围与对照表
- 字段数量:必须是 5 段,用空白分隔。少于或多于 5 段都会被判为「字段数错误」并指明期望 5 段。
- 各段范围:分 0–59、时 0–23、日 1–31、月 1–12、周 0–7。越界(如分填 60、月填 13)会标红并说明是哪一段。
- 语法字符:允许
*、/、-、,与数字。出现字母或无法解析的片段会提示「第 N 段含有非法字符」。 - 对照表:上表列出五段字段的含义、范围与常见写法,共 5 行,未超过 12 行,故直接全量展示,无需加载更多。
对照表是「语法速查」,结果区是「针对你输入的实算」;两者结合既能学规则,也能验对错。
结果边界与舍入
- 周字段 0 与 7 等价。若你写
0或7都表示周日,解析描述会注明「0、7 为周日」,匹配时归一成 0,不会漏判。 - 日与周同时为 * 的语义:这并不表示「既要满足日又要满足周」(那会矛盾),而是「每天」,因为两段都放开等于没有日/周约束,仅受分、时、月限制。
- 模拟上限 5 年。部分稀有组合(如 2 月 30 日那样的无效日期 cron)可能永远不命中,页面在 5 年窗口内无结果时明确提示「未来 5 年内无匹配」,不会无限卡住。
- 分钟级精度。模拟以 1 分钟为步,能精确给出「09:00:00」这样的整点;若表达式要求秒级(6 段),本工具不支持,会按 5 段规则处理或报字段数错误。
- 全程本地计算。解析与模拟只用日期运算与集合判断,全部在浏览器内完成,不发起网络请求,也不写 Cookie 或 localStorage。
常见问题
为什么提示「字段数错误」?
标准 Cron 必须是 5 段(分 时 日 月 周)。若你只写了 4 段(常见于漏掉周字段)或写了 6 段(含秒),页面会判定字段数不对并期待 5 段。请补齐或删减到正好 5 段再用。
分填 60、月填 13 为什么会报错?
因为各段有明确范围:分 0–59、月 1–12。60 分、13 月都超出边界,页面会明确指出是「第 1 段(分钟)」或「第 4 段(月)」越界,而不是笼统地说不合法,方便你定位修改。
「日」和「周」都写了具体值会怎样?
按 Vixie Cron 的「或」语义:两段同时限制时,命中任意一段即触发。例如「日=1,15 且 周=1」会在每月 1 号、15 号,以及每个周一都跑(三者的并集)。若你本意是「每月 1 号且是周一」,这种表达式表达不了,需要拆成两条。
0 和 7 都是周日吗?
是的。Cron 第 5 段里 0 与 7 都代表星期日。本工具两者都接受,并在描述中注明;匹配阶段统一把 7 归一为 0,保证不漏掉周日的命中。
未来运行时间为什么和别家工具对不上?
多数在线工具用「当前真实时间」做起点,所以结果随时变化;本工具固定用你填的「参考起始时间」(默认 2026-01-01 00:00)逐分钟模拟,结果可复现、可写进文档。把参考时间改成「现在」再解析,就能和依赖当前时间的工具对齐。
支持 @daily、JAN、MON 这类写法吗?
不支持。本工具只解析纯数字 5 段式,支持 *、*/n、a-b、a-b/n、列表与单值。宏(@daily)和英文月份/星期别名需要先在别处展开成数字再贴进来。
为什么模拟要逐分钟而不是跳着算?
为了不漏掉任何合法点。虽然可以针对「分、时」做跳步优化,但日/周的 OR 组合在月末、闰年等边界上不规整,逐分钟推进最稳妥,5 年窗口约 263 万次判断,浏览器瞬间完成。
解析结果会被上传吗?
不会。所有解析与模拟都在你当前浏览器里完成,页面不发起任何网络请求,也不写 Cookie 或 localStorage。你在开发者工具的 Network 面板里点几次「解析表达式」,面板始终是空的。