更新记录
2.0.1(2026-03-11)
- 修复ios编译报错
2.0.0(2026-03-04)
- 新增 updateEventCalendar 更新日历事件功能
- 新增 queryEventCalendar 按时间段查询日历事件功能,支持关键字过滤
- 新增事件地点(location)字段支持
- 新增事件URL链接字段支持
- 新增事件可用性状态(availability):忙碌/空闲/暂定/不可用
- 新增高级重复规则(RecurrenceRule)支持:每日/每周/每月/每年重复
- 新增重复间隔配置(如每2周、每3个月)
- 新增重复结束日期和重复次数配置
- 新增按月重复时指定日期(daysOfMonth)
- 新增按年重复时指定月份(monthsOfYear)
- 查询结果新增 location、url、isAllDay、availability、alarms、hasRecurrence、recurrenceFrequency、recurrenceInterval 等字段
- 重构代码结构,提取公共方法,提高可维护性
- 完善 interface.uts 类型定义
1.1.0(2026-02-03)
- 新增 Android 平台支持
- 使用 Android CalendarContract API 实现日历提醒功能
- 自动请求日历读写权限
- 统一 iOS 和 Android 返回数据格式
平台兼容性
uni-app(4.84)
| Vue2 | Vue2插件版本 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
|---|---|---|---|---|---|---|---|---|---|
| √ | 2.0.0 | × | × | × | × | × | 5.0 | 12 | × |
| 微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 小红书小程序 | 快应用-华为 | 快应用-联盟 |
|---|---|---|---|---|---|---|---|---|---|---|---|
| × | × | × | × | × | × | × | × | × | - | × | × |
uni-app x(4.84)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.0 | 12 | × | × |
jun-calendar-event
uni-app 系统日历提醒插件 - 支持 iOS & Android 双平台
一个功能完善的 UTS 插件,用于在 uni-app 应用中调用系统原生日历功能,支持创建、更新、查询、删除日历提醒事件。
✨ 功能特性
- ✅ 双平台支持: iOS 和 Android 原生实现
- ✅ 完整 CRUD: 创建、查询、更新、删除日历事件
- ✅ 多种重复规则: 每日、每周、每月、每年重复
- ✅ 重复间隔: 支持每N天/周/月/年的间隔重复
- ✅ 重复终止: 支持设置重复结束日期或重复次数
- ✅ 闹钟提醒: 可设置多个提醒时间点
- ✅ 全天事件: 支持全天事件类型
- ✅ 事件地点: 设置事件发生的地点
- ✅ URL链接: 关联URL
- ✅ 可用性状态: 忙碌/空闲/暂定/不可用
- ✅ 高级查询: 按时间段查询,支持关键字过滤
- ✅ 权限管理: 自动请求和处理日历权限
- ✅ 时区适配: 自动使用设备当前时区
📱 平台实现
| 平台 | 实现方式 | 最低版本 | 状态 |
|---|---|---|---|
| iOS | EventKit Framework | iOS 9.0+ | ✅ 已支持 |
| Android | CalendarContract API | Android 5.0+ (API 21) | ✅ 已支持 |
🚀 快速开始
1. 安装插件
将插件导入到项目的 uni_modules 目录下,或通过 HBuilderX 插件市场导入。
2. 导入使用
import {
createEventCalendar,
updateEventCalendar,
removeEventCalendar,
getEventCalendar,
queryEventCalendar,
removeAllEventCalendar,
} from "@/uni_modules/jun-calendar-event";
3. 创建日历提醒
createEventCalendar({
title: "团队会议",
notes: "讨论项目进度",
startDate: "2026-03-25 10:00:00",
endDate: "2026-03-25 12:00:00",
alarmOffset: [-60 * 15], // 提前15分钟提醒
isAllDay: false,
weeks: [],
location: "会议室A",
url: "https://meeting.example.com/123",
recurrence: null,
availability: "busy",
success: (res) => {
console.log("创建成功,事件ID:", res.eventId);
},
fail: (err) => {
console.log("创建失败:", err.message);
},
});
4. 创建带高级重复规则的事件
// 每2周的周一、三、五重复,持续到2026年底
createEventCalendar({
title: "健身训练",
notes: "记得带运动装备",
startDate: "2026-03-23 18:00:00",
endDate: "2026-03-23 20:00:00",
alarmOffset: [-60 * 30, -60 * 10],
isAllDay: false,
weeks: [],
location: "健身房",
url: "",
recurrence: {
frequency: "weekly",
interval: 2,
daysOfWeek: [1, 3, 5],
daysOfMonth: [],
monthsOfYear: [],
endDate: "2026-12-31 23:59:59",
count: 0,
},
availability: "busy",
success: (res) => console.log("创建成功", res.eventId),
fail: (err) => console.log("创建失败", err.message),
});
// 每月15号重复
createEventCalendar({
title: "月度总结",
notes: "提交月报",
startDate: "2026-03-15 09:00:00",
endDate: "2026-03-15 10:00:00",
alarmOffset: [-60 * 60],
isAllDay: false,
weeks: [],
location: "办公室",
url: "",
recurrence: {
frequency: "monthly",
interval: 1,
daysOfWeek: [],
daysOfMonth: [15],
monthsOfYear: [],
endDate: "",
count: 12,
},
availability: "busy",
success: (res) => console.log("创建成功"),
fail: (err) => console.log("创建失败"),
});
5. 更新日历事件
updateEventCalendar({
eventId: "event_id_here",
title: "团队会议(已改期)",
notes: "讨论项目进度 - 新会议室",
startDate: "2026-03-26 14:00:00",
endDate: "2026-03-26 16:00:00",
alarmOffset: [-60 * 30],
isAllDay: false,
weeks: [],
location: "会议室B",
url: "",
recurrence: null,
availability: "busy",
success: (res) => {
console.log("更新成功");
},
fail: (err) => {
console.log("更新失败:", err.message);
},
});
6. 查询日历提醒
// 查询所有事件(当前到未来一年)
getEventCalendar((eventsJson) => {
const events = JSON.parse(eventsJson);
console.log("查询到的事件:", events);
});
// 按时间段查询,支持关键字过滤
queryEventCalendar({
startDate: "2026-03-01 00:00:00",
endDate: "2026-03-31 23:59:59",
keyword: "会议",
success: (eventsJson) => {
const events = JSON.parse(eventsJson);
console.log("查询到的事件:", events);
},
fail: (err) => {
console.log("查询失败:", err.message);
},
});
7. 删除日历提醒
removeEventCalendar({
idfer: "event_id_here",
success: (res) => {
console.log("删除成功");
},
fail: (err) => {
console.log("删除失败:", err.message);
},
});
📖 API 文档
createEventCalendar(options)
创建日历提醒事件
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| title | String | 是 | 日历事件标题 |
| notes | String | 是 | 日历事件备注/描述 |
| startDate | String | 是 | 开始时间,格式:yyyy-MM-dd HH:mm:ss |
| endDate | String | 是 | 结束时间,格式:yyyy-MM-dd HH:mm:ss |
| alarmOffset | Array\<Number> | 是 | 提醒时间数组,单位:秒,负数表示提前 |
| isAllDay | Boolean | 是 | 是否为全天事件 |
| weeks | Array\<Number> | 是 | 每周重复,[0-6] 代表周日到周六,空数组不重复(被recurrence覆盖) |
| location | String | 否 | 事件地点 |
| url | String | 否 | 关联URL链接 |
| recurrence | RecurrenceRule | null | 否 | 高级重复规则,设置后覆盖weeks |
| availability | String | 否 | 可用性状态:busy/free/tentative/unavailable,默认busy |
| success | Function | 否 | 成功回调,参数:{ eventId: string } |
| fail | Function | 否 | 失败回调,参数:{ message: string } |
updateEventCalendar(options)
更新已有的日历事件
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| eventId | String | 是 | 要更新的事件ID |
| title | String | 是 | 事件标题 |
| notes | String | 是 | 事件备注 |
| startDate | String | 是 | 开始时间 |
| endDate | String | 是 | 结束时间 |
| alarmOffset | Array\<Number> | 是 | 提醒时间数组 |
| isAllDay | Boolean | 是 | 是否全天事件 |
| weeks | Array\<Number> | 是 | 每周重复 |
| location | String | 否 | 事件地点 |
| url | String | 否 | 关联URL |
| recurrence | RecurrenceRule | null | 否 | 高级重复规则 |
| availability | String | 否 | 可用性状态 |
| success | Function | 否 | 成功回调 |
| fail | Function | 否 | 失败回调 |
queryEventCalendar(options)
按时间段查询日历事件,支持关键字过滤
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| startDate | String | 是 | 查询开始时间 |
| endDate | String | 是 | 查询结束时间 |
| keyword | String | 否 | 按标题/备注/地点关键字过滤 |
| success | Function | 否 | 成功回调,参数为事件JSON字符串 |
| fail | Function | 否 | 失败回调 |
getEventCalendar(callback)
查询日历提醒列表(当前时间到未来一年)
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| callback | Function | 是 | 回调函数,参数为 JSON 字符串 |
removeEventCalendar(options)
删除指定的日历提醒
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| idfer | String | 是 | 事件 ID |
| success | Function | 否 | 成功回调 |
| fail | Function | 否 | 失败回调 |
removeAllEventCalendar(options)
删除指定时间段内的所有日历提醒
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| startDate | String | 是 | 开始时间 |
| endDate | String | 是 | 结束时间 |
| success | Function | 否 | 成功回调 |
| fail | Function | 否 | 失败回调 |
RecurrenceRule 重复规则
| 参数 | 类型 | 说明 |
|---|---|---|
| frequency | String | 重复频率:daily/weekly/monthly/yearly |
| interval | Number | 重复间隔,默认1 |
| daysOfWeek | Array\<Number> | 按周重复时指定星期几,0=周日 ~ 6=周六 |
| daysOfMonth | Array\<Number> | 按月重复时指定日期,如[1,15] |
| monthsOfYear | Array\<Number> | 按年重复时指定月份,1-12 |
| endDate | String | 重复结束日期,空字符串=永不结束 |
| count | Number | 重复次数,0=无限次(与endDate二选一,endDate优先) |
返回数据格式
{
eventId: "事件唯一标识",
title: "事件标题",
notes: "事件备注",
startDate: "2026-03-25 10:00:00",
endDate: "2026-03-25 12:00:00",
rules: [1, 3, 5], // 每周重复规则
location: "会议室A", // 事件地点
url: "https://example.com", // 关联URL
isAllDay: false, // 是否全天
availability: "busy", // 可用性状态
alarms: [-900, -3600], // 闹钟提醒偏移(秒)
hasRecurrence: true, // 是否有重复规则
recurrenceFrequency: "weekly", // 重复频率
recurrenceInterval: 2 // 重复间隔
}
⚠️ 注意事项
1. 自定义基座
UTS 插件必须使用自定义基座进行测试和运行
2. 日期格式
日期时间必须严格遵守格式:yyyy-MM-dd HH:mm:ss
3. 提醒时间
alarmOffset 参数说明:
- 单位:秒
- 负数表示提前,正数表示延后
- 示例:
-60 * 15= 提前 15 分钟-60 * 60= 提前 1 小时-60 * 60 * 24= 提前 1 天
4. 重复规则
简单重复使用 weeks 参数,高级重复使用 recurrence 参数:
recurrence设置后会覆盖weeksrecurrence.endDate和recurrence.count二选一,endDate优先- 不同频率配合不同的子字段使用
5. 权限处理
- iOS: 首次使用会弹出系统权限请求对话框
- Android: 自动请求日历读写权限
将额外权限加入到 manifest.json > app-plus > distribute > android > permissions
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT"/>
📚 相关文档
📝 更新日志
v2.0.0 (2026-03-04)
- ✨ 新增
updateEventCalendar更新日历事件 - ✨ 新增
queryEventCalendar按时间段查询事件,支持关键字过滤 - ✨ 新增事件地点(location)支持
- ✨ 新增事件URL链接支持
- ✨ 新增事件可用性状态(availability)
- ✨ 新增高级重复规则(RecurrenceRule):每日/每周/每月/每年
- ✨ 新增重复间隔、结束日期、重复次数配置
- ✨ 查询结果字段大幅扩展
- 🔧 重构代码结构,提取公共方法
- 📝 完善类型定义和文档
v1.1.0 (2024-12-20)
- ✨ 新增 Android 平台完整支持
- 🔧 统一 iOS 和 Android 数据格式
- 📝 完善文档和示例
- 🐛 修复已知问题
v1.0.0 (2024-07-04)
- 🎉 首次发布
- ✅ iOS 平台支持
📄 许可证
MIT License

收藏人数:
购买源码授权版(
试用
赞赏(0)
下载 27
赞赏 0
下载 11481693
赞赏 1881
赞赏
京公网安备:11010802035340号