Skip to content

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 规范,建议参考官方文档确认格式字符串。