Obsidian使用Dataview日记概览

读取一个文件夹下的所有日记文件,生成一个日记概览,包括日期、内容。达到类似logseq的日记效果。
安装插件:Dataview https://github.com/blacksmithgu/obsidian-dataview 开启dataviewjs功能
根目录新建文件,贴入下面代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/**
* 生成最近N天的日期数组(降序排列)
* @param {number} days - 需要生成的天数
* @param {boolean} [includeToday=true] - 是否包含今天
* @returns {string[]} 日期字符串数组,格式:YYYY-MM-DD
*/
function getRecentDates(days, includeToday = true) {
// 参数校验
if (typeof days !== 'number' || days < 1) return [];

// 初始化日期对象
const date = new Date();
if (!includeToday) date.setDate(date.getDate() - 1);

// 日期格式化函数
const format = d => [
d.getFullYear(),
(d.getMonth() + 1).toString().padStart(2, '0'),
d.getDate().toString().padStart(2, '0')
].join('_');

// 生成日期数组
const result = [];
for (let i = 0; i < days; i++) {
result.push(format(new Date(date)));
date.setDate(date.getDate() - 1);
}

return result;
}

const arr = getRecentDates(200);

arr.map(d => dv.paragraph(`![[${d}]]`))

另一种方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function reverseArray(arr) {
const reversed = [];
for (let i = arr.length - 1; i >= 0; i--) {
reversed.push(arr[i]);
}
return reversed;
}

const pages = dv.pages('"journals"').slice(-20)
const a = reverseArray(pages)

a.map(async page => {
const filePath = page.file.path;
const fileContent = await app.vault.read(app.vault.getAbstractFileByPath(filePath));
// dv.paragraph(`![[${page.file.name}]]`);
dv.paragraph(`#### ${page.file.name}`);
dv.paragraph(`${fileContent}`);
dv.paragraph('\n');
})

别的方案

Daily Notes Viewer 插件 https://github.com/Johnson0907/obsidian-daily-notes-viewer

作者

Wei Mo

发布于

2025-03-17

更新于

2025-03-17

许可协议

评论