嗯嗯,可以了
可以再问最后一个问题吗?
如果:
范围不是某个标签,而是某个笔记下的所有反链。「该笔记下有很多的反链」
这样也可以实现吗?
再次感谢
不清楚你想要的需求是否是:假设有笔记a.md,所有引用了a.md的笔记,且这些笔记的创建时间是今日之前或xxx-xxx之间,是这样吗?如果是,可以用如下方法:
```dataviewjs
//允许列表,只有在这个列表中的才被筛选(比如允许inlinks包含demo.md的文件等)
const allows = ["demo.md", "demo/demo2.md"];
//筛选数组类型的字段(比如tags等)
//const allowFiled = p => p.file.tags.values;
//筛选数组对象类型的字段(比如inlinks,outlinks等)
const allowFiled = p => p.file.outlinks.values.map(it=>it.path);
//其他字段也可以通过修改allowFiled函数实现
//判断是否允许的字段
const isAllow=(fields)=>allows.some(item=>fields.includes(item))
dv.header(3, '今日之前')
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) < new Date(new Date().setHours(0, 0, 0, 0))&&isAllow(allowFiled(p))).map(p=>p.file.link))
const start = '2024-01-01 00:00:00';
const end = '2024-01-02 23:59:59';
dv.header(3, `${start.substr(0, 10)} ~ ${end.substr(0, 10)} 之间`)
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) >= new Date(start)&&new Date(p.ctime) <= new Date(end)&&isAllow(allowFiled(p))).map(p=>p.file.link))
```
注意:这里对某笔笔记是内链的,可能对其他笔记是外链,可以尝试修改
const allowFiled = p => p.file.outlinks.values.map(it=>it.path);
中的outlinks或inlinks看哪种是你的需求。
如果你的需求是读取某文件(比如a.md)文件的所有反向链接即内链,然后把这些内链设为筛选条件,可以将上面代码的
const allows = ["demo.md", "demo/demo2.md"];
修改为
const allows = dv.page("demo.md").file.inlinks.values.map(it=>it.path);
如果想支持多个文件的内链可以把const allows=[…] 修改为:
const allows = dv.pages('"demo.md" or "demo2.md"').values.map(p => p.file.outlinks.values.map(p => p.path)).flat(Infinity)
如果你的需求特别,那也可以把这些内链单独提取出来手动修改const allows=[…]
*不清楚你想要的需求是否是:假设有笔记a.md,所有引用了a.md的笔记,且这些笔记的创建时间是今日之前或xxx-xxx之间,是这样吗?
差不多是这样的,但是其他笔记都是yaml区引用a.md笔记的,类似其他笔记归类到a.md笔记。「我的笔记是用这种方式替代标签汇总」
然后我就想在这些笔记里:汇总今日之前或者xxx-xxx之间(时间是yaml自定义时间ctime)
哦,这样的话,上面代码,把const allows = [“demo.md”, “demo/demo2.md”]; 改为 const allows = [“a.md”]; 即可。
但我用你这个方法,没有出来想到的结果,能帮我看下是哪里出问题了吗?
-
c和b基本都是汇总到a笔记,ctime时间都在今天之前的
结果
a笔记里都没有显示今天之前
里面的代码是:
- 改成这个也不行
不知道是哪里我弄错了
看不出来,不要截图,发代码,方便调试和比较差异,b笔记日期不对,c笔记应该没问题,你试试这个
```dataviewjs
//允许列表,只有在这个列表中的才被筛选(比如允许inlinks包含demo.md的文件等)
const allows = ["a笔记.md"];
//筛选数组类型的字段(比如tags等)
//const allowFiled = p => p.file.tags.values;
//筛选数组对象类型的字段(比如inlinks,outlinks等)
const allowFiled = p => p.file.outlinks.values.map(it=>it.path);
//其他字段也可以通过修改allowFiled函数实现
//判断是否允许的字段
const isAllow=(fields)=>allows.some(item=>fields.includes(item))
dv.header(3, '今日之前')
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) < new Date(new Date().setHours(0, 0, 0, 0))&&isAllow(allowFiled(p))).map(p=>p.file.link))
const start = '2024-01-01 00:00:00';
const end = '2024-01-02 23:59:59';
dv.header(3, `${start.substr(0, 10)} ~ ${end.substr(0, 10)} 之间`)
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) >= new Date(start)&&new Date(p.ctime) <= new Date(end)&&isAllow(allowFiled(p))).map(p=>p.file.link))
```
嗯嗯,也不行,跟前次的情况一样,也是什么都没有出来
看这里
发你的代码,我试试,我这边和你的情况一样没问题
我就是用你的拷贝的
```dataviewjs
const allows = dv.page("b笔记.md").file.outlinks.values.map(it=>it.path);
const allowFiled = p => p.file.outlinks.values.map(it=>it.path);
const isAllow=(fields)=>allows.some(item=>fields.includes(item))
dv.header(3, '今日之前')
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) < new Date(new Date().setHours(0, 0, 0, 0))&&isAllow(allowFiled(p))).map(p=>p.file.link))
这里b笔记改成c笔记,都能显示a笔记的反链。
嗯嗯,你这个正是我想要的效果
感谢感谢,真是麻烦你了
今日之前不应该包含b,b的日期是今天,具体原因我也不清楚,建议在新仓库中,纯净环境中测试,这个需要根据自己情况去测试。
嗯嗯 我知道了,麻烦你了
没有改
谢谢,确实,那b日期就没问题了,不过,他的第一份代码,即下面这个,什么都筛选不到,不清楚什么原。
```dataviewjs
//允许列表,只有在这个列表中的才被筛选(比如允许inlinks包含demo.md的文件等)
const allows = ["a笔记.md"];
//筛选数组类型的字段(比如tags等)
//const allowFiled = p => p.file.tags.values;
//筛选数组对象类型的字段(比如inlinks,outlinks等)
const allowFiled = p => p.file.outlinks.values.map(it=>it.path);
//其他字段也可以通过修改allowFiled函数实现
//判断是否允许的字段
const isAllow=(fields)=>allows.some(item=>fields.includes(item))
dv.header(3, '今日之前')
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) < new Date(new Date().setHours(0, 0, 0, 0))&&isAllow(allowFiled(p))).map(p=>p.file.link))
const start = '2024-01-01 00:00:00';
const end = '2024-01-02 23:59:59';
dv.header(3, `${start.substr(0, 10)} ~ ${end.substr(0, 10)} 之间`)
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) >= new Date(start)&&new Date(p.ctime) <= new Date(end)&&isAllow(allowFiled(p))).map(p=>p.file.link))
```
不过,殊路同归,能解决问题就行。