我对某些yaml区自定义了时间
然后我想怎么汇总在今日之前所有的笔记(自定义时间的笔记),或者统计某个时间段的笔记(自定义时间)
用正则,语法问gpt
我不懂,你能帮我问下,谢谢
```dataviewjs
dv.header(3, '今日之前')
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) < new Date(new Date().setHours(0, 0, 0, 0))).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)).map(p=>p.file.link))
```
第一段输出今日之前不需要输入日期,如果没匹配到内容,可能是文档没ctime字段,或ctime字段不是今日之前,这两个查询的前提是必须有ctime字段。
谢谢您的回复
这里有个问题,我这个ctime是今日之前的,但却没有汇总统计进去,是什么原因
感觉今日之前的语句有点问题,很多昨天自定义创建的ctime时间的笔记都没有汇总过来,
然后呢,修改下ctime的时间之后也是汇总不显示的。
但是用下面范围的那个语句:就可以把今天之前的笔记都统计过来
可以了,非常谢谢
能再请教下吗?
就是在这个基础上,可以加上某个标签下的范围吗。
就是在这个标签下,汇总今天之前的所有笔记(自定义时间的笔记)。
谢谢
```dataviewjs
//允许的标签,只有在这个标签列表中的才被筛选
const allowTags = ["#demo1", "#demo2"];
const isAllowTags=(tags)=>allowTags.some(tag=>tags.includes(tag))
dv.header(3, '今日之前')
dv.list(dv.pages().filter(p=>p.ctime&&new Date(p.ctime) < new Date(new Date().setHours(0, 0, 0, 0))&&isAllowTags(p.file.tags.values)).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)&&isAllowTags(p.file.tags.values)).map(p=>p.file.link))
```
嗯嗯,可以了
可以再问最后一个问题吗?
如果:
范围不是某个标签,而是某个笔记下的所有反链。「该笔记下有很多的反链」
这样也可以实现吗?
再次感谢
不清楚你想要的需求是否是:假设有笔记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”]; 即可。
但我用你这个方法,没有出来想到的结果,能帮我看下是哪里出问题了吗?
结果
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))
```
嗯嗯,也不行,跟前次的情况一样,也是什么都没有出来
看这里