Skip to content

periodic-notes 插件教程

Periodic Notes 插件使用指南

Periodic Notes 是 Obsidian 中用于自动创建和管理周期笔记(日记、周记、月记、年记等)的插件,配合模板实现有时间维度的笔记管理。

插件特点

特性说明
📅 多周期支持支持日记、周记、月记、季记、年记等多种周期
🎨 模板集成每个周期可配置独立的模板
⌨️ 快捷命令一键创建/打开当前周期的笔记
🔗 与日历联动与 Calendar 插件配合实现可视化导航
⚙️ 自定义命名自定义文件名格式和路径

安装插件

  1. 打开「设置」→「第三方插件」→ 关闭「安全模式」
  2. 点击「浏览」→ 搜索「Periodic Notes」→ 安装并启用

基础配置

启用周期类型

在「设置」→「Periodic Notes」中启用需要的周期:

周期建议启用路径示例
DailyJournal/Daily/{{date}}
WeeklyJournal/Weekly/{{date:YYYY-[W]ww}}
MonthlyJournal/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: 模板变量不生效?

  1. 确认使用支持模板变量的模板文件(.md)
  2. 检查变量格式,如 {{date}} 是否正确
  3. 尝试重启 Obsidian

Q: 周期笔记创建失败?

  1. 确认目标文件夹存在
  2. 检查文件名格式是否合法(避免特殊字符)
  3. 查看 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?

  1. 确保现有日记使用标准命名格式(如 YYYY-MM-DD
  2. 设置 Periodic Notes 的文件夹路径与现有日记一致
  3. 插件会自动识别并关联现有笔记

Q: 多周期笔记冲突?

避免在不同周期的笔记中使用相同的文件名。Periodic Notes 支持通过设置中的「Create if doesn't exist」选项控制是否覆盖。

Q: 模板中日期计算错误?

日期格式必须严格遵循 Moment.js 规范,建议参考官方文档确认格式字符串。