过去的方法和问题

在之前,如果你想在 Notion 的数据库中构建间隔重复任务,最好的方法就是用数据库的「重复模板」来定期生成任务:

Notion20241214自动间隔重复任务 008555@2x.png

但是这样一来就存在两个问题:

  1. 即便上一个任务没有完成,下一个任务也会自动生成
  2. 定期生成的任务会塞满数据库

不过在 Notion 的自动化(Automation)以及按钮(Button)支持了函数变量之后,我们终于可以构建更加高效和聪明的间隔重复任务了。

效果演示

  1. 可以自定义「间隔天数」

点击「打卡」按钮后,就会将「下次打卡日期」修改为间隔天数后的日期。例如下图,初始的打卡日期都是 12 月 14 号,间隔天数则各自为 1、2、3 天,点击「打卡」后,就会各自变成 15、16、17 号:

202412141345.gif

  1. 打卡之后,可自动生成打卡子任务

Notion20241214自动间隔重复任务 008557@2x.png

  1. 可以统计总的打卡次数

Notion20241214自动间隔重复任务 008559@2x.png

在「画廊」视图下,会更像打卡的卡片

Notion20241214自动间隔重复任务 008561@2x.png

  1. 有打卡日期,显示下次的打卡日期

Notion20241214自动间隔重复任务   下次打卡时间008563@2x.png

并且最重要的是,因为我们是直接修改了这个打卡任务的日期,所以不会额外生成一堆新的打卡任务,避免让这个日历视图变得非常臃肿混乱。

  1. 有一个单独的日历视图,用来显示所有生成的打卡子任务,便于你回顾在什么日期都打了什么卡

Notion20241214自动间隔重复任务   所有打卡记录008565@2x.png

实现原理

上述所有动作全都封装在一个按钮中,我们来一步步拆解这个按钮。

定义定义变量

变量 1

因为我们需要在子项(sub-items)中,生成当前打卡任务的打卡记录,并且希望子项的标题(Title)与主项相同,所以我定义了一个变量,将主项的名称赋值给这个变量

202412141357.png

变量 2

因为我们希望在打卡之后,能够将「下次打卡日期」加上间隔的天数,所以需要再定义一个变量,变量的值如下:

202412141360.png

这里涉及到两个函数,具体用法你可以阅读我的 《Notion 中文系统课程》 的《函数解析 3.4 篇》。

  • dateAdd
  • toNumber

另外上图中的函数写法,是 Notion 在 Formula 2.0 中更新的最新用法,你可以阅读这篇《解析》。

变量 3

因为我们希望每次点击「打卡」按钮后,总的打卡次数可以 +1 ,那么最简单的办法就是在像下图这样,定义一个「完成加一」的变量

Notion20241214自动间隔重复任务 008571@2x.png

创建打卡子项

1️⃣ 因为希望打卡子项的标题名称可以跟主项一样,所以需要将子项的标题名称设置为「变量 1」。

2️⃣ 因为希望子项能够放在主项下面,所以需要将子项的关联(Relation)设置为当前页面(即触发动作的这个主项页面)

3️⃣ 将子项的打卡日期设置为动作的触发日期

Notion20241214自动间隔重复任务 008575@2x.png

编辑主项

1️⃣ 将下次打卡日期设置为「变量 2

3️⃣ 将完成次数设置为「变量 3

Notion20241214自动间隔重复任务 008577@2x.png

这样一来,就可以实现如本文开头所说的间隔重复打卡效果了。