月历任务
unlistedby duany2026
滴答清单风格的月视图任务管理插件,支持农历、节假日和调休显示
月历任务插件 (Monthly Tasks)
📥 下载安装(小白版)
- 打开本仓库的 Releases 页面,下载最新版本的
monthly-tasks-1.7.10.zip - 解压,得到文件夹
monthly-tasks - 打开你的 Obsidian 笔记库文件夹,进入隐藏目录
.obsidian/plugins/(如果没见过这个目录:在 Obsidian 里点左下角仓库图标 →「在系统资源管理器中显示仓库」,进去就能看到.obsidian) - 把解压出的
monthly-tasks文件夹整个放进去,变成.obsidian/plugins/monthly-tasks/(里面应有main.js、manifest.json、styles.css) - 重启 Obsidian → 设置 → 第三方插件 → 关闭「安全模式」→ 在已安装插件列表中启用「月历任务」
进阶:也可以安装 BRAT 插件,添加仓库地址
https://github.com/duany2026/obsidian-monthly-tasks,以后可自动更新。
一款为 Obsidian 打造的滴答清单风格月视图任务管理插件,支持农历显示、节假日标注和调休信息展示。
功能特性
核心功能
- 月视图日历 - 清晰的 5-6 周动态网格布局,查看每月任务一目了然
- 任务管理 - 快速创建、完成、删除任务
- 优先级标记 - 🔴 高优先级 / 🟡 中优先级 / 普通
- 跨天任务 - 多日任务在起止日期内的每一天自动显示
- 农历显示 - 自动显示中国传统农历日期
节假日
- 法定节假日标注 - 春节、国庆、五一劳动节等用红色背景高亮
- 调休日标注 - 周末上班日用蓝色背景标注
- 按需数据更新 - 浏览到未缓存年份时自动按需获取(holiday-cn / timor.tech);启动预取与手动刷新可选
用户体验
- 深色模式 - 自动适配 Obsidian 主题
- 移动端适配 - 响应式设计,手机平板都能用;格子内任务超出可视区时可直接上下滑动查看(不出现滚动条,底部渐隐提示「还能滑」)
- 操作简便 - 点击日期即可添加任务,支持命令面板操作
安装
方式一:BRAT
- 安装 BRAT 插件
- 在 BRAT 设置中添加本插件的 GitHub 仓库地址:
duany2026/obsidian-monthly-tasks - 启用插件即可
方式二:手动安装
- 下载最新版本的
monthly-tasks-1.7.10.zip - 解压到 Obsidian 插件目录
.obsidian/plugins/monthly-tasks/ - 重启 Obsidian 并启用插件
使用方法
打开月历视图
- 点击左侧边栏的日历图标
- 或使用命令面板(
Ctrl/Cmd + P)搜索「月历任务」 - 选择「打开月历任务视图」
添加任务
- 点击任意日期格子
- 在弹窗中输入任务内容
- 可选择:
- 📅 截止日期 - 默认当天
- ⏰ 时间范围 - 非全天任务可设置起止时间(需在设置中关闭「默认全天任务」才会显示时间输入)
- 🎨 优先级 - 高/中/普通
- 🛫 跨天任务 - 设置开始日期后,任务在起止日期内的每一天重复显示(格子内以蓝色渐变条标识,首日带续接箭头)
- 按 Enter 键或点击确认按钮创建任务
任务格式
任务以标准 Obsidian checklist 格式存储:
- [ ] 完成任务 📅 2026-04-22
- [x] 已完成任务 📅 2026-04-21
- [ ] 跨天任务 🛫 2026-04-22 📅 2026-04-25
- [ ] 带时间的任务 ⏰ 09:00~12:00 📅 2026-04-22
- [ ] 高优先级任务 🔴 📅 2026-04-22
- [ ] 中优先级任务 🟡 📅 2026-04-22
任务自动保存到 任务/YYYY年任务列表.md 文件中(统一归集,不写入日记文件)。
设置选项
| 设置项 | 说明 | 默认值 |
|---|---|---|
| 显示已完成任务 | 在日历中显示已完成任务 | ✅ 开启 |
| 已完成隐藏删除线 | 打开后已完成任务将隐藏删除线 | ✅ 开启 |
| 默认全天任务 | 新建任务默认为全天 | ✅ 开启 |
| 每周第一天 | 周日或周一 | 周日 |
| 显示农历 | 显示中国传统农历 | ✅ 开启 |
| 显示节假日 | 显示法定节假日和调休 | ✅ 开启 |
| 每日任务上限 | 每天最多显示的任务数 | 5 |
| 任务文件夹 | 选择任务文件的存储位置 | 默认(任务) |
| 启动时自动刷新节假日 | 启用插件时自动从 holiday-cn / timor.tech 获取最新数据 | ❌ 关闭 |
| 刷新节假日数据 | 从网络获取最新节假日 | 按钮 |
数据存储
插件数据存储在插件设置中:
data.json- 用户设置和节假日缓存任务/YYYY年任务列表.md- 任务内容文件
节假日数据
数据获取链
按顺序尝试,任一源成功即采用:
- holiday-cn — 社区维护,跟随国务院公告及时更新,覆盖 2007 年至今(经 jsDelivr CDN 访问)
- timor.tech — 备份数据源
- 内置兜底 — 插件目录
holidays.json(2022–2026 官方数据,离线可用)
内置兜底数据(holidays.json)
- 随插件分发,无网络时仍可显示已内置年份;官方未发布的年份不写预测数据
- 数据与代码分离:更新内置数据只需替换插件目录下的
holidays.json,无需改代码。格式:
{
"2026": [
{ "date": "2026-01-01", "name": "元旦", "type": "legal", "isOff": true },
{ "date": "2026-05-09", "name": "班", "type": "workday", "isOff": false }
]
}
- 内置数据不再逐年维护:新年份由上面的数据源自动覆盖
使用方式
- 浏览到未缓存年份(如 2007 年起的历史年份、未来新年份)时会自动按需获取该年数据
- 「启动时自动刷新节假日」默认关闭,仅控制启动时是否预取今年前后三年;也可手动点击「刷新节假日数据」强制刷新今年前后三年
- 数据获取失败按 5 分钟退避,期间浏览不重复请求
界面预览
┌─────────────────────────────────────────────┐
│ ◀ 2026年4月 ▶ │
├─────┬─────┬─────┬─────┬─────┬─────┬─────┤
│ 日 │ 一 │ 二 │ 三 │ 四 │ 五 │ 六 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ │ │ │ 1 │ 2 │ 3 │ 4 │
│ │ │ │ │ │ 清明 │ 清明 │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ 5 │ 6 │ 7 │ 8 │ 9 │ 10 │ 11 │
│ 清明│ │ │ │ │ 班 │ │
├─────┼─────┼─────┼─────┼─────┼─────┼─────┤
│ ... │
└─────────────────────────────────────────────┘
技术架构
模块结构
| 模块 | 说明 |
|---|---|
| TaskModel | 任务数据模型,包含任务解析、优先级提取等工具函数 |
| TaskParser | 任务解析器,负责解析 Obsidian 库中的任务,管理缓存 |
| Calendar | 日历工具,生成月历网格数据 |
| LunarCalendar | 农历转换,支持 1900-2100 年的农历日期转换 |
| HolidayManager | 节假日管理器,管理法定节假日和调休信息 |
| MonthlyView | 月历视图,渲染日历网格和任务列表 |
| CreateTaskModal | 创建任务弹窗,处理任务创建表单 |
| DatePickerModal | 日期选择器弹窗,支持快速切换年月 |
| MonthlyTasksPlugin | 插件主类,管理插件生命周期 |
| MonthlyTasksSettingTab | 设置界面,提供用户配置选项 |
技术栈
- 语言: JavaScript(
main.js为唯一源码,直接手工维护,无构建步骤) - 框架: Obsidian API
- 样式: CSS(移动端优先设计)
- 数据: 数据源链(holiday-cn → timor.tech)+
holidays.json内置兜底
更新日志
查看完整的版本更新历史,请参阅 CHANGELOG.md。
最新版本 v1.7.10 (2026-10-10)
变更
- 手机端格子内的任务不再按高度收进「+N」:全部留在格子里,超出可视区的部分直接上下滑动查看;「+N」从此只表示设置项「每格最多 N 条」截掉的条数
- 滑动全程不出现滚动条(这台老 WebView 一出滚动条就必扣 5px 内容宽,正是「一行少显示一个字」的根因):容器保持
overflow:hidden,由触摸推动内容;只在真溢出时接管手势,横向滑动与到边界后的页面滚动都不受影响 - 手感:几何量一次缓存+写入合帧+抬手惯性,并给仍有内容的格子底部加一条渐隐作「还能滑」的提示
- 修掉「+N」位置乱飘(绝对定位的基准元素选错,角标会压到日期号上)
- 两态一致性收尾:可用高度改用「盒高向上取整+1px」,消除格子随框架底部工具栏折叠在「3 条」与「2++1」之间反复翻脸
内部
- 拆除 v1.7.9d 起的临时诊断(版本角标+几何读数条);量测方法更名
_mtTrimMobileCells→_mtMeasureMobileCells - manifest / CHANGELOG / versions.json / README / 源代码头注释版本号统一至 1.7.10
完整变更见 CHANGELOG.md。
v1.7.9 (2026-10-10)
修复
- 「切回 2+1」追加固防:v1.7.8 靠 ResizeObserver 报信补裁在真机老 WebView 上未生效,改为渲染后定时复裁(下一帧+再一帧+约 1.2 秒,幂等),直接量最终布局,不再依赖任何报信机制;观察器保留,继续负责旋转/分栏等活跃 resize
- 手机端右下角临时显示「v1.7.9」版本角标:手机不热更新插件代码,改版须手动重同步+关开插件,此前无法从截图判断「没修好」是代码问题还是同步问题;真机验证通过后移除
内部
- manifest / CHANGELOG / versions.json / README / 源代码头注释版本号统一至 1.7.9
完整变更见 CHANGELOG.md。
v1.7.8 (2026-10-10)
修复
- 10 月 9 日「首开显示 3 条、切回变 2 条++1」的两态不一致:切回时重挂载的网格先按未受约束的矮行高裁了一刀,之后行高恢复等分却没人补裁——ResizeObserver 只盯外层容器、其自身高度不变不触发。现在网格本身也纳入观察(行高恢复瞬间即重裁),放得下判据再加 1px 容差防亚像素误判
完整变更见 CHANGELOG.md。
v1.7.7 (2026-10-10)
修复
- 手机端「切走再回、每行只剩 3 个字」的自锁消除:等分行高+格子按实际高度截断(装不下的收进「+N」点击查看该日全部),首开与切回两态一致;桌面端维持既有内滚设计不变
- 新建任务弹窗在「默认全天」开启时恢复不显示时间区(回退 1.7.6 的恒渲染):弹窗长度优先,想建/改定时任务先到设置里关掉「默认全天」
内部
- manifest / CHANGELOG / versions.json / README / 源代码头注释版本号统一至 1.7.7
完整变更见 CHANGELOG.md。
v1.7.6 (2026-10-10)
修复
* [x]任务勾选后不再永久显示为未完成、第二次点击起卡死;日程视图点行编辑跨天任务不再平移开始日期;提交侧剥离字符集补✅/➕,不再产生任何视图都看不到、也无法从界面删除的孤儿任务行- 编辑「单时间点」任务(
⏰ 09:00)不再被改写成时间段、凌晨编辑不再被无端拒绝保存;默认设置下终于能直接创建带时间的任务;手工写坏的⏰ 25:99保存时原样写回并提示 - 节假日持久化改为逐年判成功,网络部分失败不再把内置兜底数据写死进
data.json;视图关闭时补关新建/编辑任务弹窗;删除失败不再一声不响,行号补偿改为按真实位移 - 强制刷新不再让日历整块空白;格子内滚动条不再吃掉一个汉字(隐藏规则上收成全局);
tasksPerDayLimit现在真的是「每格最多 N 条」 - 新建任务文件行尾按文件夹实测取多数;内联结束日期选择器补 1900-2100 年份钳制;键盘可达性、加载失败态、渲染异常收敛等其余低危项同步修复
内部
- 七处与代码矛盾的注释同步改正;注释行号引用改为标识符引用;manifest / CHANGELOG / versions.json / README / 源代码头注释版本号统一至 1.7.6
完整变更见 CHANGELOG.md。
v1.7.5 (2026-10-09)
修复
- 「无法识别的日期任务行」日志行号不再被行内容覆盖(三语言模板同步修复)
- 任务行识别统一支持
-与*两种列表符号,手输的* [ ]任务全程可用(编辑重建统一规范为- [ ]) - 插件卸载时视图菜单弹窗一并关闭,不再残留失联弹窗
- 繁体界面补充「惜光節/環境日」译名;缓存失效后不再短暂展示旧任务快照
内部
- 清理历史转译残留写法,恢复原生
?.;manifest / CHANGELOG / versions.json / README / 源代码头注释版本号统一至 1.7.5
完整变更见 CHANGELOG.md。
v1.4.1 (2026-09-24)
修复
- 日期选择弹窗切换年份后月份高亮不再残留;节假日网络层改用 Obsidian
requestUrl(移动端不再受 CORS 限制) - 全库任务解析增加并发去重;新建文件夹后「任务文件夹」下拉立即可见;手动刷新与浏览获取共用请求通道
- 23 点后新建任务默认时间不再回绕到已过去时段;弹窗小日历跟随「每周第一天」;「今天」格子对齐、各端字号一致
内部
- 移除节假日 builtin 升级死路径;删除两处死代码;补齐 CHANGELOG.md
完整变更见 CHANGELOG.md。
v1.4.0 (2026-09-05)
移动端
- 创建任务弹窗改用 Obsidian Modal 基类:系统返回键、ESC、点遮罩均可关闭;打开弹窗不再自动拉起输入法
- 适配新版弹窗结构:去掉多余的 X 按钮与顶部空白;触屏上悬停效果不再粘滞,「已有任务」的删除/跳转按钮常显
修复与打磨
- 中文输入法按 Enter 确认候选词不再误提交任务;仅有 🛫 无 📅 的跨天任务不再静默消失
- 「今天」格子外框收敛;暗色模式对比度与一致性修复;弹窗背景改用主题变量,兼容亮色自定义主题
- 发布前复审:浏览到未缓存年份(2022-2026 以外)时月历不再被网络请求阻塞(先渲染、取回后补刷一次,离线不再卡顿最长约 24.5 秒);弹窗框架装饰清理移除类名正则启发式扫描;README 联网口径更正(默认不预取,仅浏览未内置年份时按需请求)
完整变更见 CHANGELOG.md。1.3.7–1.3.9 为未发布的内部迭代,已并入 1.4.0。
v1.3.6 (2026-09-04)
修复
- 倒序建月(如先建 3 月任务再建 2 月)不再产生连续两个
---分隔符:插入点前已有分隔符时复用 - 倒序建月后新月份与后续月份之间补齐
---分界,向早月追加任务不再"串"进下一月份的 section - 新建月份 section 时空行按需补齐,不再在头部规则线前累积冗余空行
v1.3.5 (2026-09-04)
修复
- 切换到其他视图再切回时月历不再左右抖动:重挂载瞬间滚动条闪现不再挤压网格宽度(固定预留滚动条槽位)
- 容器高度口径修正(
box-sizing: border-box),消除恒超出 view-content 24px 的幽灵溢出
内部
- 清理 styles.css 死样式 138 行(main.js 交叉引用核验,无功能影响)
v1.3.4 (2026-09-03)
优化
- 移除每次新增任务与勾选完成时的成功提示(任务出现在日历中、勾选框状态变化本身就是反馈);所有失败提示保留
v1.3.3 (2026-09-02)
修复
- 侧栏矮面板下月历网格不再被裁切:5 周月动态行数 + 容器可滚动
- 创建任务写入保持 CRLF/LF 行尾一致与 Markdown 结构完整
- 弹窗内日期选择浮层不再被模态框裁切
- 非法日期、⏰ 时间垃圾值改为显式提示/丢弃,不再静默参与逻辑
- 弹窗任务计数按所选日期过滤;跨天区间超 366 天仅挂载首尾日
- 设置加载全字段校验;卸载时清理日期选择器
优化
metadataCache预筛覆盖无listItems文件,减少无谓全文读取- 内置节假日数据允许会话内一次网络升级,落实「API 优先」
发布打包
打包发布时只包含 main.js、manifest.json、styles.css、holidays.json(可选 versions.json),不要携带本地 data.json——其中存有作者本机的设置(如节假日自动刷新开关)与节假日缓存,会让新用户安装后即继承作者设置、启动就联网预取。插件的联网口径是:默认不预取(启动预取由「启动时自动刷新」控制,默认关);浏览到未内置年份(2022-2026 以外)时会按需向 holiday-cn / timor.tech 请求该年数据。
作者
duany2026 (@duany2026)
- 仓库:https://github.com/duany2026/obsidian-monthly-tasks
- 反馈问题或建议:https://github.com/duany2026/obsidian-monthly-tasks/issues
License
MIT License - 详见 LICENSE 文件
贡献
欢迎提交 Issue 和 Pull Request!
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.