不知道大家怎么管理任务的,我喜欢把笔记某一行标上日期,比如2025年6月6日,然后通过dataview直接显示出来未来七天的所有我标了日期的笔记,直接显示在我的主页,代码如下:
```dataviewjs
// 获取当前日期(无时间部分)
const today = dv.date(dv.date('now').toISODate());
// 生成未来7天的日期(包含今天),支持多种格式变体
const futureDates = Array.from({length: 7}, (_, i) => {
const date = today.plus({days: i});
return [
`${date.year}年${date.month}月${date.day}日`,
];
}).flat();
// 获取所有笔记文件
const allFiles = app.vault.getMarkdownFiles();
let results = [];
// 遍历所有笔记文件
for (const file of allFiles) {
try {
// 直接读取文件内容(避免索引问题)
const content = await app.vault.read(file);
// 检查是否包含任何目标日期
const matchedDates = futureDates.filter(date => content.includes(date));
if (matchedDates.length > 0) {
// 获取文件状态信息
const stats = app.vault.getAbstractFileByPath(file.path).stat;
// 添加到结果集
results.push({
file,
content,
matchedDates,
mtime: stats.mtime
});
}
} catch (error) {
console.error(`处理文件 ${file.path} 时出错:`, error);
}
}
// 按修改时间排序
results.sort((a, b) => b.mtime - a.mtime);
if (results.length > 0) {
// 创建一个数组来收集所有匹配行
const allMatches = [];
results.forEach(r => {
// 使用循环处理每个匹配的日期
r.matchedDates.forEach(date => {
// 查找当前日期在内容中的所有出现位置
let searchPosition = 0;
while (searchPosition < r.content.length) {
const dateIndex = r.content.indexOf(date, searchPosition);
if (dateIndex === -1) break; // 找不到更多匹配
// 向前查找行首
let lineStart = dateIndex;
while (lineStart > 0 && r.content[lineStart - 1] !== '\n') {
lineStart--;
}
// 向后查找行尾
let lineEnd = dateIndex + date.length;
while (lineEnd < r.content.length && r.content[lineEnd] !== '\n') {
lineEnd++;
}
// 获取整行内容
const snippet = r.content.substring(lineStart, lineEnd);
// 添加到结果集
allMatches.push({
file: r.file,
date: date,
snippet: snippet
});
// 移动搜索位置到当前行之后
searchPosition = lineEnd + 1;
}
});
});
// 按日期排序(可选)
allMatches.sort((a, b) => a.date.localeCompare(b.date));
// 显示所有匹配项在一个表格中
dv.table(
["日期", "笔记名称", "内容片段"],
allMatches.map(match => [
match.date,
dv.fileLink(match.file.path),
match.snippet
])
);
} else {
dv.paragraph("❌ 未在任何笔记中找到匹配的日期");
}
// 显示统计信息
dv.paragraph(`📊 扫描了 ${allFiles.length} 个笔记,找到 ${results.length} 个笔记包含匹配日期`);
结果如下:
