请问有实现回顾类似Dayone里面“那年今日”功能的插件吗?

在Dayone里面可以很容易看到那年今日的日记。对回顾自己的状态还是很有帮助的。请问Obsidian里面能实现类似的功能吗?谢谢!

可以用 Obsidian Dataview 插件,配合 Homepage 插件。

那年今日的实现

如果有回顾那年今日创建的所有笔记的需求的话,可以用下面的 dataview:

table WITHOUT ID file.link AS "笔记",file.ctime as "时间"
where dateformat(file.ctime,"MM-dd") = dateformat(date(today),"MM-dd")
limit 10

大概效果是:

如果你只希望查看那年今日的日记的话,可以使用 from 命令,例如假设你的日记都放在根目录下的 “日记” 文件夹,那么就可以使用下面的 dataview:

table WITHOUT ID file.link AS "日记",file.ctime as "时间"
from "日记"
where dateformat(file.ctime,"MM-dd") = dateformat(date(today),"MM-dd")
limit 10

你可以阅读 dataview 的官方文档 实现任何你想要的效果。

1 个赞

试过了,好用。非常感谢!

再请教一下。如果是查询去年的昨日,在哪里减去 1 啊? 我试着把 dur(1day) 从 file.ctime 加上,或者 today 那边减去,都报告错误。谢谢!

如果只想查询去年今日的话有多种实现方式:

类似于上面的那年今日,但是只看去年今日新建的笔记

table WITHOUT ID file.link AS "去年今日",file.ctime as "时间"
where file.cday = date(today)-dur(1 year)
limit 10

只看去年今日的日记

此时只需要看一个文件,因此不需要新建 List,你可以用一行非常简单的命令实现:

今天是 `= "[[日记/"+date(today)+"|"+date(today)+"]]"` ,看看去年的今天 `= "[[日记/"+(date(today) - dur(1 years))+"|"+(date(today) - dur(1 years))+"]]"` 都做了什么吧 ~

你可以把上面的 “日记” 改成你真正存放日记的文件夹。

实现的效果大概是:

其实这里还有一点问题:如果你在多设备同步的话,文件的创建日期可能是不一样的——例如你昨天在电脑 A 上新建了一个文件,但是今天你想在电脑 B 同步(利用 remotely save/官方同步/syncthing etc.),那么这个文件在电脑 B 上的创建日期可能是今天而不是昨天。想解决这个问题的话,你可以尝试利用 obsidian templater 插件在新建文件的时候给每个文件的头部添加一个 Create Time Tag,这样或许会解决这个问题。

PS:如果通过移动文件备份的话应该不会出现上述问题。

抱歉,我没有讲清楚。去年今日或者某年今日的 功能,已经在您的指导下实现了。

我想再咨询一下,例如,今天是2022-10-21,我想查询 2021-10-20或者2021-10-19,如果使用 dur(1day) or dur(2 days),应该如何写表达式。谢谢!

你需要修改 where 的约束条件。我上面写了这两种:

  • where dateformat(file.ctime,"MM-dd") = dateformat(date(today),"MM-dd")
    • 这一种是比较月份和日子。如果你要查询那年昨日的话们可以修改为:
      where dateformat(file.ctime,"MM-dd") = dateformat(date(today)-dur(1 day),"MM-dd")
  • where file.cday = date(today)-dur(1 year)
    • 这一种只能看去年今日,如果你想看去年昨日的话,可以修改为:
      where file.cday = date(today)-dur(1 year)-dur(1 day)

不知道是否解决了你的问题。

另外,你也可以贴一下你的代码和报错信息,这样可以看看你是否有哪里写错了。

按照您的这个方法,很完美的解决了问题!谢谢!

刚才我自己在网上查 dur(1day)的例子,然后尝试加上去。因为对语法没概念,直接加到 date() 里面去了,所以报错。

where dateformat(file.ctime,“MM-dd”) = dateformat(date(today)-dur(1 day),“MM-dd”) 可以很好的实现Dayone里面 “那年今日”的界面上,左右滑动,可以看某年今日的前后几日的日记的效果。

感谢指教!

1 个赞

用templater插入的creation time tag是个字符串,不能直接用dataformat了,应该怎么修改您给的这段代码呢?谢谢

找到办法了:

where substring(creationTime,5,10) =substring(this.creationTime,5,10)