比如显示未完成代办事项且不包括本文件中的代办事项
task
where !completed and file.name != this.file.name
比如显示未完成代办事项且不包括本文件中的代办事项
task
where !completed and file.name != this.file.name
我想筛选出一段时间内的笔记。因此在YAML区设置了creationTime(格式为“YYYY-MM-DD HH:mm” )、Startdate和Enddate(格式为“YYYY-MM-DD”),过滤语句为const files = app.vault.getMarkdownFiles().filter(f => (moment(f.creationTime).format(‘YYYY-MM-DD’) >= moment(dv.current().Startdate.ts).format(‘YYYY-MM-DD’)) && (moment(f.creationTime).format(‘YYYY-MM-DD’) <= moment(dv.current().Enddate.ts).format(‘YYYY-MM-DD’))),但是检索不到任何结果。应该怎么修改呢?
你这样弄错了,单纯比较大小不用格式化成字符串
const files = dv.pages().filter(f => f.creationTime.ts >= dv.current().Startdate.ts && f.creationTime.ts <= dv.current().Enddate.ts)
出错了。
“Evaluation Error: TypeError: Cannot read properties of undefined (reading ‘ts’)”
好吧,看起来不是所有笔记都有creationTime,导致访问出错了
const files = dv.pages().filter(f => f.creationTime?.ts >= dv.current().Startdate?.ts && f.creationTime?.ts <= dv.current().Enddate?.ts)
出错了。
“Evaluation Error: TypeError: Cannot read properties of undefined (reading ‘ts’)”
完整代码只有这一行吗,单这一行不可能报错,顶多没有结果
应该是这个原因导致出错。我把creationTime改成了file.cday,错误提示没有了,变成了啥都没有的一个空白行。
const files = dv.pages().filter(f => f.creationTime && f.creationTime.ts >= dv.current().Startdate.ts && f.creationTime.ts <= dv.current().Enddate.ts)
这样呢,这样还会报相同的错就奇怪了
其他代码就是用的 Obsidian 插件之 Dataview - 知乎 (zhihu.com)中“ 输出所有带有标签的文件名以及对应行且形成表格”部分的代码。现在想增加限制,筛选出某一时间段的文件。
我说呢,你咋不按dvjs的套路来写,起手一个 app.vault.getMarkdownFiles()
这样改之后错误提示没了,留下一个空白行。
用app.vault.getMarkdownFiles()也是一样的毛病
let files_p = dv.pages().filter(f => f.creationTime && f.creationTime.ts >= dv.current().Startdate.ts && f.creationTime.ts <= dv.current().Enddate.ts).map(p=>p.path)
// 修改标签
const tag = "#active"
// 获取 Obsidian 中的所有 Markdown 文件
const files = app.vault.getMarkdownFiles().filter(p=>files_p.includes(p.path))
// 将带有标签的文件筛选出来
const taggedFiles = new Set(files.reduce((acc, file) => {
const tags = app.metadataCache.getFileCache(file).tags
if (tags) {
let filtered = tags.filter(t => t.tag === tag)
if (filtered) {
return [...acc, file]
}
}
return acc
}, []))
// 创建带有标签的行数组
const arr = Array.from(taggedFiles).map(async(file) => {
const content = await app.vault.cachedRead(file)
const lines = await content.split("\n").filter(line => line.includes(tag))
return [file.name, lines]
})
// 生成表格
Promise.all(arr).then(values => {
dv.table(["file", "lines"], values)
})
现在不出错,但是什么都没找到,提示“No results to show for table query.”
啊这,好像又漏了点东西
let files_p = dv.pages().filter(f => f.creationTime && f.creationTime.ts >= dv.current().Startdate.ts && f.creationTime.ts <= dv.current().Enddate.ts).map(p=>p.file.path)
还是No results to show for table query.
还是日期格式惹的祸。
我的creationTime是“2023-10-16 23:30”这样的格式。如果写成“2023-10-16”,您给的代码就能起作用了。
那么,针对“2023-10-16 23:30”这样的格式,应该怎么修改代码呢?