简介
这个 Notion 函数可以帮助你自动判断任务的状态、截止日期和完成情况,并以不同颜色和图标直观显示。它能够显示任务是否按时完成、提前完成、逾期完成,或者对于未完成的任务,显示剩余时间或已逾期时间。


设置方法
1. 创建必要的字段
确保你的 Notion 数据库中有以下属性,名称必须完全一致:
- 排期(类型:日期)
- 状态(类型:状态)
- 完成日期(类型:日期)
2. 设置状态字段
在状态属性中,添加以下选项:
- 收集
- 搁置
- 待办
- 执行中
- 完成
- 放弃

可以根据个人喜好为这些状态设置不同的颜色。
3. 创建函数字段
- 添加一个函数字段
- 将属性命名为逾期提醒(或你喜欢的任何名称)
- 选择属性类型为公式
- 在公式编辑框中粘贴以下代码
你也可以加入我的 知识星球,免费获取本站分享的所有 Notion 技巧/模板/函数用例/更新咨询
设置完成后,函数会根据任务的状态、排期和完成日期自动显示不同的提示。
判断逻辑
Notion 任务状态与逾期判断函数流程图 (版本 v16.2)
schedule = prop("排期")
, status = prop("状态")
, completionDate = prop("完成日期")
, nowDate = now()
, isScheduleEmpty = empty(schedule)
, isCompletionDateEmpty = empty(completionDate)
hasScheduleTime = not isScheduleEmpty and formatDate(dateEnd(schedule), "HH:mm") != "00:00"
, hasCompletionTime = not isCompletionDateEmpty and formatDate(completionDate, "HH:mm") != "00:00"
, shouldShowDetailedTime = hasScheduleTime or hasCompletionTime
status
) 是什么?status == "放弃"
isCompletionDateEmpty
)status == "完成"
deadline = if(isScheduleEmpty, "", dateEnd(schedule))
isScheduleEmpty and isCompletionDateEmpty
(排期和完成日期都为空)isCompletionDateEmpty
(完成日期为空, 排期不为空)isScheduleEmpty
(排期为空, 完成日期不为空)completionDate > deadline
(逾期完成)diff_minutes = dateBetween(completionDate, deadline, "minutes")
, days = floor(diff_minutes / 1440)
, hours = floor(mod(diff_minutes, 1440) / 60)
, minutes = mod(diff_minutes, 60)
completionDate == deadline
(准时完成)diff_minutes = dateBetween(deadline, completionDate, "minutes")
, days = floor(diff_minutes / 1440)
, hours = floor(mod(diff_minutes, 1440) / 60)
, minutes = mod(diff_minutes, 60)
isScheduleEmpty
)deadline = dateEnd(schedule)
not isCompletionDateEmpty
)completionDate )
formatDate(nowDate, "YYYY-MM-DD") == formatDate(deadline, "YYYY-MM-DD")
(今天截止)formatDate(nowDate, "YYYY-MM-DD") == formatDate(dateAdd(deadline, -1, "days"), "YYYY-MM-DD")
(明天截止)nowDate > deadline
(已超期)shouldShowDetailedTime
)diff_minutes = dateBetween(nowDate, deadline, "minutes")
, days = floor(diff_minutes / 1440)
, hours = floor(mod(diff_minutes, 1440) / 60)
, minutes = mod(diff_minutes, 60)
overdueDays = dateBetween(dateStart(nowDate), dateStart(deadline), "days")
shouldShowDetailedTime
)diff_minutes = dateBetween(deadline, nowDate, "minutes")
, days = floor(diff_minutes / 1440)
, hours = floor(mod(diff_minutes, 1440) / 60)
, minutes = mod(diff_minutes, 60)
days == 0 and hours (不到一天)
remainingDays = dateBetween(parseDate(formatDate(deadline, "YYYY-MM-DD")), parseDate(formatDate(nowDate, "YYYY-MM-DD")), "days")
remainingDays == 2
(后天)状态显示示例
已完成任务
活动中任务
特殊状态
本站所有文章,除非特别说明或标注,均为本站原创发布。转载本文需附上本文链接,未经授权,禁止大篇幅复制、盗用、采集或发布本站内容至其他网站、书籍等各类媒体平台。