思源笔记新建存放日记 年 / 月 / 周 / 日的路径设置分享

本贴最后更新于 200 天前,其中的信息可能已经天翻地覆

一、需求背景:从流水账到结构化复盘的归档逻辑

作为习惯用笔记软件记录生活的人,我希望实现这样的归档规则:

  • 每日随手记录流水账(按日期命名)
  • 每周汇总到对应周目录(按「年 / 月 + 周数」分级)
  • 每月生成月度总结(按月份聚合每周内容)

核心需求是新建日记时自动生成「年 / 月 / 周 / 日」层级路径。其中关键逻辑在于:如何定义「周」的归属?
我采用「周一作为每周第一天」的规则,并设计两种周数计算方式:

  1. 年相对周数:以自然年为周期,计算全年第 N 周(如 2025 年第 1 周从 1 月第一个周一算起)
  2. 月相对周数:以自然月为周期,计算当月第 N 周(如 2025 年 6 月第 1 周从 6 月首个周一算起)

年相对周数

image.png

月相对周数

image.png

二、两种周数计算逻辑与实现代码

▌ 方案一:年相对周数(全年第 N 周)

代码拆解:

{{$currentWeekday := mod (now|Weekday|add 6) 7}}        // 当前星期几(0=周一,1=周二...6=周日)
{{$mondayOfThisWeek := now.AddDate 0 0 (mul -1 $currentWeekday | int)}}  // 本周一日期
{{$firstDayOfYear := parseTime (join "-" (list ($mondayOfThisWeek.Year|toString) "01-01"))}} // 本年第一天
{{$daysDifference := $mondayOfThisWeek.Sub $firstDayOfYear }}             // 距离本年第一天的秒数差
{{$weekNumber := div (div $daysDifference.Seconds 86400 |int|add 7) 7}}   // 本年第几周,本年的第一个周一起算第一周。
{{$yearMonthOfMonday := $mondayOfThisWeek| date "2006/01"}}               //本周所属月份,按照本周周一所在月份计算。
本周所属月份{{$mondayOfThisWeek| date "2006/01"}}
本周是第{{$weekNumber}}周

合并在一起,新建日记的路径如下:

{{$currentWeekday := mod (now|Weekday|add 6) 7}}  {{$mondayOfThisWeek := now.AddDate 0 0 (mul -1 $currentWeekday | int)}}{{$firstDayOfYear := parseTime (join "-" (list ($mondayOfThisWeek.Year|toString) "01-01"))}}{{$daysDifference := $mondayOfThisWeek.Sub $firstDayOfYear }}{{$weekNumber := div (div $daysDifference.Seconds 86400 |int|add 7) 7}}daily note/{{$mondayOfThisWeek| date "2006/01"}}/第{{$weekNumber}}周/{{now | date "2006-01-02"}}

在 TestTemplate 插件中测试效果如下:

image.png

▌ 方案二:月相对周数(当月第 N 周)

代码拆解:

{{$currentWeekday := mod (now|Weekday|add 6) 7}}        // 当前星期几(0=周一,1=周二...6=周日)
{{$mondayOfThisWeek := now.AddDate 0 0 (mul -1 $currentWeekday | int)}}  // 本周一日期
{{$firstDayOfMonth := parseTime (join "-" (list ($mondayOfThisWeek | date "2006-01"|toString) "01"))}} // 本月的第一天
{{$daysDifference := $mondayOfThisWeek.Sub $firstDayOfMonth }}             // 距离本月第一天的秒数差
{{$weekNumber := div (div $daysDifference.Seconds 86400 |int|add 7) 7}}   // 本月第几周,本月的第一个周一起算第一周。
{{$yearMonthOfMonday := $mondayOfThisWeek| date "2006/01"}}               //本周所属月份,按照本周周一所在月份计算。

本周所属月份{{$mondayOfThisWeek| date "2006/01"}}
本周是第{{$weekNumber}}周

合并在一起,新建日记的路径如下:

{{$currentWeekday := mod (now|Weekday|add 6) 7}} {{$mondayOfThisWeek := now.AddDate 0 0 (mul -1 $currentWeekday | int)}}{{$firstDayOfMonth := parseTime (join "-" (list ($mondayOfThisWeek | date "2006-01"|toString) "01"))}}{{$daysDifference := $mondayOfThisWeek.Sub $firstDayOfMonth }}{{$weekNumber := div (div $daysDifference.Seconds 86400 |int|add 7) 7}}{{$yearMonthOfMonday := $mondayOfThisWeek| date "2006/01"}}daily note/{{$mondayOfThisWeek| date "2006/01"}}/第{{$weekNumber}}周/{{now | date "2006-01-02"}}

在 TestTemplate 插件中测试效果如下:

image.png

三、参考文档

思源模板功能新人指南:模板语法 + 函数 + md 块语法

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    28444 引用 • 119764 回帖
  • 日记
    72 引用 • 309 回帖 • 2 关注
  • 模板
    23 引用 • 123 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • pakeh2866

    感谢分享

    1 回复
  • 其他回帖
  • Douby

    谢谢大佬。我去下了那个插件,然后是直接往模版?里面粘贴吗
    形如(xxx 笔记本 ▽)(这里)
    😂 我一开始还想是不是什么开发者工具 ,我去找相关内容的改,想着修改函数,结果没相关内容。然后刚刚粗略看了看你发的参考,又看到了一个比较久远的帖子,发现原来我不需要周的话,可以很简单的改。但是貌似看到的版本不太一样,找了找,找到了。

    1 回复
  • zhenzhia

    我特意设置的计算逻辑,就是新年第一天如果不是周一,那新年这一天算第一周还是算上一年的最后一个周的问题,我这里计算的是算的上一年的最后一个周,所以会有这个问题。如果你需要新年第一天所在的周开始计算第一个周,只需要把计算第几周的逻辑判断从周一换成周日就行

  • N0ah

    🙏 感谢分享,非常有帮助,本来想自己琢磨一下怎么弄,这下省了很多时间。

  • 查看全部回帖