periodic-notes 插件教程
Periodic Notes 插件使用指南
Periodic Notes 是 Obsidian 中用于自动创建和管理周期笔记(日记、周记、月记、年记等)的插件,配合模板实现有时间维度的笔记管理。
插件特点
| 特性 | 说明 |
|---|---|
| 📅 多周期支持 | 支持日记、周记、月记、季记、年记等多种周期 |
| 🎨 模板集成 | 每个周期可配置独立的模板 |
| ⌨️ 快捷命令 | 一键创建/打开当前周期的笔记 |
| 🔗 与日历联动 | 与 Calendar 插件配合实现可视化导航 |
| ⚙️ 自定义命名 | 自定义文件名格式和路径 |
安装插件
- 打开「设置」→「第三方插件」→ 关闭「安全模式」
- 点击「浏览」→ 搜索「Periodic Notes」→ 安装并启用
基础配置
启用周期类型
在「设置」→「Periodic Notes」中启用需要的周期:
| 周期 | 建议启用 | 路径示例 |
|---|---|---|
| Daily | ✅ | Journal/Daily/{{date}} |
| Weekly | ✅ | Journal/Weekly/{{date:YYYY-[W]ww}} |
| Monthly | ✅ | Journal/Monthly/{{date:YYYY-MM}} |
| Quarterly | 可选 | Journal/Quarterly/{{date:YYYY-[Q]Q}} |
| Yearly | 可选 | Journal/Yearly/{{date:YYYY}} |
配置日记设置
Daily note folder: Journal/Daily
Date format: YYYY-MM-DD
Date link format: YYYY-MM-DD
Template: Journal/Templates/Daily.md配置周记设置
Weekly note folder: Journal/Weekly
Date format: YYYY-[W]ww
Date link format: YYYY-[W]ww
Template: Journal/Templates/Weekly.md模板设计
日记模板
markdown
---
date: {{date}}
week: {{date:gggg-[W]ww}}
day-of-week: {{date:dddd}}
tags: [日记, {{date:YYYY-MM}}]
---
# {{date:YYYY-MM-DD}} {{date:dddd}}
## 晨间日记
- 今日目标:
- 能量状态:
## 今日记录
### 完成
-
### 进行中
-
## 反思
- 今天最大的收获:
- 需要改进的地方:
## 明日计划
- [ ]周记模板
markdown
---
week: {{date:gggg-[W]ww}}
date-range: {{date:gggg-[W]ww}}
tags: [周记, {{date:gggg-[W]ww}}]
---
# 📅 第 {{date:ww}} 周
**日期范围**:{{date:gggg-MM-DD}} ~ {{date_end:gggg-MM-DD}}
## 本周目标
- [ ]
## 每日概览
| 周一 | 周二 | 周三 | 周四 | 周五 |
|------|------|------|------|------|
| [[{{date:gggg-MM-DD}}]] | [[{{date+1d:gggg-MM-DD}}]] | [[{{date+2d:gggg-MM-DD}}]] | [[{{date+3d:gggg-MM-DD}}]] | [[{{date+4d:gggg-MM-DD}}]] |
## 周总结
### 完成的任务
-
### 关键里程碑
-
### 数据统计
- 总完成任务数:
- 深度工作小时数:
## 下周计划
- [ ]月记模板
markdown
---
month: {{date:YYYY-MM}}
tags: [月记, {{date:YYYY-MM}}]
---
# 📆 {{date:YYYY}} 年 {{date:MM}} 月
## 本月主题
>
## 目标回顾
- [ ]
## 重大事件
1.
## 数据总结
```dataview
TABLE length(file.tasks) AS 任务数,
length(filter(file.tasks, t => t.completed)) AS 已完成
FROM "Journal/Daily"
WHERE month(file.day) = month(date({{date:YYYY-MM}}-01))下月计划
- [ ]
## 快捷命令
| 命令 | 说明 |
|------|------|
| `Periodic Notes: Open today's daily note` | 打开今日日记 |
| `Periodic Notes: Open this week's weekly note` | 打开本周周记 |
| `Periodic Notes: Open this month's monthly note` | 打开本月月记 |
| `Periodic Notes: Open next daily note` | 打开明天的日记 |
| `Periodic Notes: Open previous weekly note` | 打开上周周记 |
## 与 Calendar 插件联动
启用 Calendar 插件后,在日历视图中:
1. **点击日期**:自动创建/打开当日日记
2. **周视图**:显示本周所有日记的完成状态
3. **月视图**:预览本月日记的创建情况
## 使用场景
### GTD 周期管理日记 → 周回顾 → 月回顾 → 季度复盘 → 年度复盘
每个周期都有独立的笔记文件,通过模板自动关联:
- 日记中引用本周目标
- 周记中引用本月主题
- 月记中引用本季度重点
### 项目管理周期
```markdown
# 日记:2026-06-09
## 项目 Alpha
### 今日任务
- [ ] 接口开发 ← 来自周记分解
---
# 周记:2026-W24
## 项目 Alpha 本周计划
- [ ] 接口开发
- [ ] 单元测试常见问题
Q: 模板变量不生效?
- 确认使用支持模板变量的模板文件(.md)
- 检查变量格式,如
{{date}}是否正确 - 尝试重启 Obsidian
Q: 周期笔记创建失败?
- 确认目标文件夹存在
- 检查文件名格式是否合法(避免特殊字符)
- 查看 Obsidian 控制台错误信息
Q: 如何批量生成历史周期笔记?
使用 Templater 或 QuickAdd 宏批量生成:
javascript
// 批量生成过去一个月的日记
for (let i = 30; i >= 0; i--) {
const date = moment().subtract(i, 'days').format('YYYY-MM-DD');
// 调用 Periodic Notes API 创建日记
await app.commands.executeCommandById('periodic-notes:new-daily');
}Periodic Notes 高级使用案例
本文介绍 Periodic Notes 的进阶配置和工作流,涵盖多周期协同、自定义周期、自动化和跨周期数据关联。
自定义周期配置
工作周期(每 10 天)
json
{
"periods": [
{
"id": "sprint",
"name": "Sprint",
"folder": "Journal/Sprint",
"format": "Sprint-{{start}}-{{end}}",
"template": "Journal/Templates/Sprint.md"
}
]
}学期周期
适用于学生或教育工作者:
markdown
---
semester: {{date:yyyy}}-{{semester}}
week: 第 {{week-of-semester}} 周
tags: [学期, {{semester}}]
---
# 📚 {{semester}} 第 {{week-of-semester}} 周
## 课程安排
| 时间 | 周一 | 周二 | 周三 |
|------|------|------|------|
| 上午 | 数学 | 英语 | 物理 |
| 下午 | 编程 | 体育 | 化学 |
## 本周作业
- [ ] 数学作业
- [ ] 英语报告
## 学习反思
-多周期协同
日 → 周 → 月 → 季度 → 年度链路
建立周期笔记之间的自动引用:
markdown
# 日记:2026-06-09
## 今日记录
本周第 {{date:X}} 天 | 本月第 {{date:D}} 天
---
# 周记:2026-W24
## 本周主题
> 深度工作实践周
### 周目标(来自月记)
- [ ] 深度工作 20 小时
### 每日进展
| 日期 | 深度工作时长 | 完成度 |
|------|------------|--------|
| 周一 | 3h | ████████░░ |
| 周二 | 4h | ██████████ |
| ... | ... | ... |
---
# 月记:2026-06
## 本月主题
> 深度工作习惯养成
### 关键指标
- 深度工作总时长:
- 平均每日:使用 Dataview 跨周期查询
dataview
TABLE
file.link AS 日期,
length(filter(file.tasks, t => t.completed)) AS 已完成,
length(filter(file.tasks, t => !t.completed)) AS 待办
FROM "Journal/Daily"
WHERE week(file.day) = week(date(today))
FLATTEN file.tasks as task周度任务统计:
dataview
TABLE
week(file.day) AS 周次,
sum(length(filter(rows.tasks, t => t.completed))) AS 本周完成,
sum(length(filter(rows.tasks, t => !t.completed))) AS 本周待办
FROM "Journal/Daily"
WHERE file.day >= date(today) - dur(30 days)
GROUP BY week(file.day)
SORT week(file.day) DESC自动化工作流
Templater 周期导航
markdown
<%*
// 自动填充上周期和下周期的链接
const today = moment(tp.date.now());
const prevDay = today.clone().subtract(1, 'day').format('YYYY-MM-DD');
const nextDay = today.clone().add(1, 'day').format('YYYY-MM-DD');
const prevWeek = today.clone().subtract(1, 'week').format('YYYY-[W]ww');
const nextWeek = today.clone().add(1, 'week').format('YYYY-[W]ww');
-%>
## 导航
← [[Journal/Daily/<% prevDay %>|昨天]] | [[Journal/Daily/<% nextDay %>|明天]] →
← [[Journal/Weekly/<% prevWeek %>|上周]] | [[Journal/Weekly/<% nextWeek %>|下周]] →QuickAdd 自动填充
创建 QuickAdd 宏自动填充当日总结:
javascript
// quickadd-macro: daily-summary
module.exports = {
entry: async ({ app }) => {
// 获取本周周记
const weekNote = `Journal/Weekly/${moment().format('YYYY-[W]ww')}.md`;
const weekFile = app.vault.getAbstractFileByPath(weekNote);
if (weekFile) {
const content = await app.vault.read(weekFile);
// 提取本周完成的任务数
const match = content.match(/已完成:(\d+)/);
const completed = match ? match[1] : 0;
// 追加到日记
await app.vault.append(
app.workspace.getActiveFile(),
`\n\n## 今日总结\n\n本周累计完成:${completed} 项`
);
}
}
};自定义模板函数
计算工作日
markdown
<%*
// 计算本月剩余工作日
const today = moment();
const monthEnd = today.clone().endOf('month');
let workdays = 0;
let current = today.clone();
while (current.isSameOrBefore(monthEnd, 'day')) {
if (current.day() !== 0 && current.day() !== 6) {
workdays++;
}
current.add(1, 'day');
}
-%>
本月剩余工作日:**<% workdays %>** 天财务周期模板
markdown
---
周期: {{date:YYYY-MM}}
类型: 支出记录
预算: ¥{{budget}}
tags: [财务, 支出]
---
# 💰 {{date:YYYY-MM}} 支出记录
## 本月预算
剩余:¥{{budget_remaining}} / ¥{{budget}}
## 周支出明细
| 周次 | 金额 | 状态 |
|------|------|------|
| 第1周 | ¥ | ████ |
| 第2周 | ¥ | ████ |
| 第3周 | ¥ | ████ |
| 第4周 | ¥ | ████ |
## 支出分类
- 🍔 餐饮:¥
- 🚗 交通:¥
- 🛒 购物:¥
- 📱 娱乐:¥
- 其他:¥
## 记账
- [ ]高级 Dataview 查询
月度习惯追踪
dataview
TABLE
dateformat(file.day, "MM-dd") AS 日期,
length(filter(file.tasks, t =>
contains(t.text, "#运动") && !t.completed
)) AS 待运动,
length(filter(file.tasks, t =>
contains(t.text, "#阅读") && !t.completed
)) AS 待阅读
FROM "Journal/Daily"
WHERE month(file.day) = month(today)
SORT file.day ASC季度目标追踪
dataview
TABLE
"Q" + quarter(file.day) AS 季度,
length(filter(rows.tasks, t =>
contains(t.text, "项目") && t.completed
)) AS 项目完成,
length(filter(rows.tasks, t =>
contains(t.text, "学习") && t.completed
)) AS 学习完成
FROM "Journal/Daily"
WHERE file.day >= date(today) - dur(90 days)
GROUP BY "Q" + quarter(file.day)常见问题
Q: 如何迁移到 Periodic Notes?
- 确保现有日记使用标准命名格式(如
YYYY-MM-DD) - 设置 Periodic Notes 的文件夹路径与现有日记一致
- 插件会自动识别并关联现有笔记
Q: 多周期笔记冲突?
避免在不同周期的笔记中使用相同的文件名。Periodic Notes 支持通过设置中的「Create if doesn't exist」选项控制是否覆盖。
Q: 模板中日期计算错误?
日期格式必须严格遵循 Moment.js 规范,建议参考官方文档确认格式字符串。