dataview实现未来七天的任务显示

不知道大家怎么管理任务的,我喜欢把笔记某一行标上日期,比如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} 个笔记包含匹配日期`);

结果如下:
![Quicker_20250606_200219|690x173](upload://5DWvkprZqVniP21uymWnZ1StSuf.png)