Cron 表达式解析器

粘贴一个 cron 表达式,获取通俗易懂的解释,以及接下来 5 次运行时间的预览。

标准 5 字段格式:分钟 小时 日 月 星期。

5 个字段

分钟、小时、日、月、星期。

* 表示「每个值」。*/5 表示「每隔 5 个单位」。1-5 是一个范围。1,3,5 是一个列表。星期字段从 0(星期日)到 6(星期六)。

一个简单示例

*/15 9-17 * * 1-5 表示「周一至周五,上午 9 点到下午 5 点之间,每 15 分钟」。试试预设下拉菜单,查看更多常见的调度设置。

工作原理

解析器将你的表达式拆分成 5 个字段,并将每个字段展开成一组明确的允许值:分钟字段中的 */15 会变成集合 {0, 15, 30, 45},星期字段中的 1-5 会变成 {1, 2, 3, 4, 5},而像 1,3,5 这样的列表会被合并在一起。每个值在展开时都会进行范围检查,这就是为什么像 61 * * * * 这样的拼写错误会立即失败,并给出明确指出具体字段和预期范围的错误提示,而不是悄无声息地生成一个永远不会触发的调度。

「接下来 5 次运行」列表是通过暴力计算得出的,这其实是一个优点:从下一个整分钟开始,代码每次前进一分钟(最多推算一年,约 52.7 万次检查,只需几毫秒),并将每个候选分钟与展开后的集合进行比对。这种模拟而非直接计算的方式还有一个有用的副作用:像 0 0 30 2 *(2 月 30 日)这样语法正确但永远不会触发的表达式不会被当作错误,而是会返回「未来一年内未找到匹配的运行时间」。如果你看到这条提示,说明你的表达式解析没问题,但描述的日期要么不存在,要么在一年之后。

所有日期计算都使用浏览器的 Date 对象,基于你的本地时区,并且全部在此页面的 JavaScript 中运行。查看开发者工具的 Network 标签页:输入表达式时不会发出任何请求,因此你基础设施的调度信息不会离开你的电脑。