在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 啊? 我试着把 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里面 “那年今日”的界面上,左右滑动,可以看某年今日的前后几日的日记的效果。
感谢指教!
用templater插入的creation time tag是个字符串,不能直接用dataformat了,应该怎么修改您给的这段代码呢?谢谢
找到办法了:
where substring(creationTime,5,10) =substring(this.creationTime,5,10)