乐于分享
好东西不私藏

我又做了一个 Obsidian 插件——「重要日子」插件开发手记

我又做了一个 Obsidian 插件——「重要日子」插件开发手记

前几天,我发布了第一个 Obsidian 插件「月历任务」,没想到反响还不错。有朋友问我什么时候再出新作品,这不,第二个插件「重要日子」来了。

说实话,做这个插件的初衷特别简单——我妈生日那天,我居然忘了提前准备礼物。虽然最后补救了,但心里挺过意不去的。我就想,Obsidian 里能不能有个东西,帮我把这些重要的日子都记下来,提前提醒我?

找了一圈,发现现有的插件要么功能太复杂,要么界面不好看,要么不支持农历,甚至连到期日那天是周几我还要再点开日历自己看,算了,自己写一个吧。

这个插件能做什么?

简单来说,就是帮你记住那些重要的日子,并显示倒计时。

纪念日功能:

• 记录结婚纪念日、恋爱纪念日等各种值得纪念的日子

• 显示倒计时天数,告诉你还有多久

• 显示即将到来的周年数,比如「即将1周年」

• 显示已经在一起多少天、多少个月

• 显示下一次具体日期是星期几

• 14天内临近提醒,数字会变成橙色并加下划线

生日功能:

• 记录家人朋友的生日

• 支持公历和农历输入(这个很重要,很多长辈是农历生日)

• 自动计算属相和星座

• 显示即将多少岁、已经出生多少天

• 同样有倒计时和临近提醒

设计理念

做这个插件的时候,我有几个坚持的原则:

一是界面要好看。很多插件功能不错,但界面丑得让人不想用。我花了不少时间调样式,卡片设计、颜色搭配、深色模式适配,每个细节都反复打磨。

二是手机端要好。现在很多人用手机记笔记,插件如果只考虑电脑端,体验会很差。我专门优化了手机端的布局和操作,长按卡片就能编辑,很方便。

三是农历支持要完善。中国人的习惯,很多重要日子是按农历算的。我内置了 1900-2100 年的农历数据,公历农历互转很准确。而且属相是按农历年份算的,这点很多同类插件都做错了。

四是数据要简单。所有数据就存在一个普通的 Markdown 文件里,格式很简单,不会搞什么复杂的数据库。万一哪天不用这个插件了,数据还在,随时能看。

开发过程中的那些坑

看起来功能不复杂,但开发过程中踩了不少坑。

农历转换是最头疼的。一开始我用了第三方库,结果发现有些日期转换不对。后来干脆自己写了一套,内置了完整的农历数据,才算解决。

属相计算也是个坑。很多人以为属相是按公历年份算的,其实不对,是按农历年份。比如年 1 月 11 日,公历是 下一年,但农历还在上一 年,所以应该是上一个属相。这个细节我反复确认了好几遍。

手机端适配也费了不少劲。Obsidian 的 Modal API 在手机端有性能问题,弹窗会卡顿。最后我干脆自己用 DOM 写了一套弹窗,虽然代码多了点,但体验好很多。

还有卡片高度统一的问题。因为生日和纪念日显示的信息量不同,卡片高度会不一样,看起来不整齐。我写了 JS 来自动计算最大高度并统一,才算解决。

怎么用?

安装很简单,下载插件文件,放到 `.obsidian/plugins/important-days/` 目录下,重启 Obsidian 就行。

打开插件后,点击左侧边栏的心形图标,就能看到界面。右上角有个加号按钮,点击就能添加日子。

编辑也很方便,电脑端双击卡片,手机端长按卡片,就能进入编辑界面。删除按钮在编辑界面底部。

数据文件会自动创建,你也可以在设置里指定已有的文件路径。

顺便说说第一个插件

「月历任务」是我的第一个 Obsidian 插件,主要功能是在月历视图中管理任务。如果你经常用 Obsidian 做任务管理,可以试试。

它的特点是把任务和日历结合起来,你可以直观地看到每天有哪些任务,拖拽调整日期也很方便。支持农历显示、节假日标记,对中国用户很友好。

两个插件风格一致,都是简洁好用、本土化设计,可以一起使用,互不冲突。

写在最后

做插件这件事,说难不难,说简单也不简单。难的是要把每个细节都想清楚、做好,简单的是 Obsidian 的 API 文档还算完善,社区也很活跃。

如果你也有什么想法,想做个自己的插件,不妨动手试试。做出来之后,那种成就感是很特别的。

最后,如果你觉得这两个插件有用,欢迎联系我免费拿

有问题或建议,也欢迎留言交流。