更新记录
1.0.0(2026-07-19)
首发:自研高性能原生 cron 核心:表达式解析与下次触发时间计算,提供 uni-app 可调的 JS API。
平台兼容性
uni-app x(5.14)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| √ | √ | 5.0 | 12 | × | × |
nex-cron —— 高性能 Cron 定时表达式
自研高性能原生核心,实现 cron 表达式解析与下次触发时间计算,提供 uni-app 可调的 JS API。
支持 App 端(Android / iOS) 与 H5 端(5 个 API 全量可用——核心不取当前时间、纯时间戳计算;
H5 端建议应用启动时 await ensureReady() 一次);小程序不支持。
同一份 utssdk 插件同时支持 uni-app x(uvue) 与 经典 uni-app(vue3),无需分叉。 全部「值进 / 值出」:
expr为字符串,时间 / 窗口 / 次数为number,返回 JSON 字符串 /boolean/ 版本串。 自研核心,无额外系统依赖。诚实边界:本插件只算「下次触发时间」(纯计算、离线可测)。真正的后台定时唤醒 (Android
AlarmManager/ iOSBGTaskScheduler/ 前台定时器)需在 UTS / 平台侧自行接线—— 用本插件算出下次触发的 unix 毫秒,再交给平台定时器。
表达式语法(重要:6 段或 7 段,含秒)
秒 分 时 日 月 周 [年]
sec min hour dom mon dow [year]
year段可选(缺省 = 全部年份)。内部年份范围 1970–2100。- *5 段标准 cron(如 `0 0 `)不被支持**——至少需 6 段(本插件含「秒」位)。
- 支持
*通配、?(仅 日/周 位)任意、a-b范围、a,b列表、*/n步长、命名月/周(Jan/Mon、May-Aug/Mon,Wed,Fri), 以及简写@yearly/@monthly/@weekly/@daily/@hourly。 - 时间一律按 UTC 计算(入参 / 出参均为 UTC unix 毫秒时间戳)。
API
| JS API | 签名 | 说明 |
|---|---|---|
cronNext |
cronNext(expr, fromUnixMs, count): string |
从 fromUnixMs 严格之后的下 count 次触发,JSON 数组 [unixMs,...](升序)。count 为 0 → "[]";> 1000 / 非法表达式 / 越界 → 抛错 |
cronValidate |
cronValidate(expr): boolean |
表达式是否合法。永不抛错 |
cronDescribe |
cronDescribe(expr): string |
6/7 段表达式分解为 JSON {sec,min,hour,dom,mon,dow[,year]}。非法 / 简写 → 抛错 |
cronIsDue |
cronIsDue(expr, unixMs, windowMs): boolean |
[unixMs, unixMs+windowMs](两端闭区间)内是否有触发。非法 / 越界 / 负窗口 → false |
cronCoreVersion |
cronCoreVersion(): string |
核心版本号 |
边界语义
cronNext:返回严格晚于fromUnixMs的触发(不含from自身)。cronIsDue:闭区间[unixMs, unixMs+windowMs];触发按整秒对齐,unixMs毫秒部分参与比较(毫秒级精度)。
用法
import {
cronNext, cronValidate, cronDescribe, cronIsDue
} from "@/uni_modules/nex-cron";
const now = Date.now(); // UTC unix 毫秒
// 算下 5 次触发(每小时整点)
const next5 = JSON.parse(cronNext("0 0 * * * *", now, 5)) as number[];
// 把 next5[0] 交给平台定时器(AlarmManager / BGTaskScheduler)
// 校验
cronValidate("*/15 * * * * *"); // true(每 15 秒)
cronValidate("0 0 * * *"); // false(5 段不支持)
// 字段分解
const fields = JSON.parse(cronDescribe("0 30 9 * * Mon-Fri"));
// { sec:"0", min:"30", hour:"9", dom:"*", mon:"*", dow:"Mon-Fri" }
// 命中判断:未来 60 秒内是否会触发(用于轮询式定时)
if (cronIsDue("0 * * * * *", now, 60000)) { /* 下一分钟整点在窗口内 */ }
黄金向量(UTC,已验证)
锚点 2024-01-01T00:00:00Z = 1704067200000。
cronNext("0 0 * * * *", 1704069000000 /*00:30*/, 3)→[1704070800000,1704074400000,1704078000000]。cronNext("*/15 * * * * *", 1704067200000 /*00:00*/, 4)→[1704067215000,1704067230000,1704067245000,1704067260000]。cronNext("0 0 * * * *", 1704070800000 /*01:00 恰触发点*/, 1)→[1704074400000](严格之后 → 02:00)。
平台与调试边界
- App 端支持 app-android / app-ios;H5 端 5 个 API 全量可用;各家小程序不支持。
- Android 本地真机调试需 HBuilderX ≥ 4.26(自定义调试基座),云打包不受此限。
- iOS 端含 Swift 组件,宿主原生工程需开启「支持 Swift」。
- 最终 App 打包由 HBuilderX /
@dcloudioCLI 完成。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 1178
赞赏 0
下载 12438998
赞赏 1934
赞赏
京公网安备:11010802035340号