「Dataview」未来一周内待办(支持年月循环日程管理)

一句话总结

  • 利用字母标记,设置每年或每月循环显示的待办条目

简介

  • dataview DQL可以通过 - [ ]任务名称 [due:: yyyy-MM-dd] 的格式给待办添加属性
    • Metadata on Tasks and Lists - Dataview
    • 但有一些限制:
      • dateformat 函数 和 date("日期").day 无法获取非法月份的日期值(年月日必须写成 yyyy-MM-dd 的格式,月份日期不能省略 0;因此可以用 date("日期") 判断是否是合法的日期格式)
  • 总体逻辑
    • 待办分为有/无 due 属性,其中有 due 属性的待办按标记,分为每年/月提醒的循环待办
      • (循环提醒待办仅作提醒用途,不区分有无完成,因为打勾后第二个循环周期开始初始状态就是完成,重置需要额外操作或用 task 插件区分完成状态)
  • 检索的内容:未完成的非循环待办;未来七天内的循环待办
    • 纯文本 + 有合法 due 属性 + 无合法 due 属性的未来七天内的待办

正常待办

  • 无 due 属性或有合法 due 属性,仅显示未完成
task
where
where !completed and !(date(due) or contains(due, "a") or contains(due, "m"))

未来七天内+过期三天内的循环待办

  • 非合法 due 属性,不区分完成
  • 格式 - 每月循环:- [ ]任务名 [due:: m标记日]
    • 例: - [ ]还信用卡 [due:: m10],表示每月 3 日~13 日,当前待办会出现在下面的 dataview 列表中
  • 格式 - 每年循环:- [ ]任务名 [due:: a标记月-日]
    • 月日可不补齐 0,已添加自动补齐
    • 例: - [ ]续费 [due:: a9-8],表示每年 9 月 1 日~11 日,当前待办会出现在下面的 dataview 列表中)
    • 标记日前的字母不能为 y,否则无法生效(纯文本(无 due 属性)的 contains(due,"y") 值始终为 true,原因暂不清楚)
task
where !date(due)
where (padleft(split(substring(due, 1), "-")[0], 2, "0") + padleft(split(substring(due, 1), "-")[1], 2, "0") <= dateformat(date(today) + dur(7 day),"MMdd") and padleft(split(substring(due, 1), "-")[0], 2, "0") + padleft(split(substring(due, 1), "-")[1], 2, "0") >= dateformat(date(today) - dur(3 day),"MMdd")) and contains(due, "a") OR ((number(substring(due, 1)) <= (date(today) + dur(7 day)).day and number(substring(due, 1)) >= (date(today) - dur(3 day)).day) and contains(due, "m"))
1 个赞