yaml自定义时间的怎么范围查询

我对某些yaml区自定义了时间


然后我想怎么汇总在今日之前所有的笔记(自定义时间的笔记),或者统计某个时间段的笔记(自定义时间)

用正则,语法问gpt

我不懂,你能帮我问下,谢谢 :pray:

```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))
```

谢谢
单单是今天之前的统计处能发下吗?
你这个法过来好想是一定要输入时间范围的


我现在就是想直接打开页面下就可以看到今天之前的统计,不想再输入时间。
麻烦! :pray:

第一段输出今日之前不需要输入日期,如果没匹配到内容,可能是文档没ctime字段,或ctime字段不是今日之前,这两个查询的前提是必须有ctime字段。

谢谢您的回复
这里有个问题,我这个ctime是今日之前的,但却没有汇总统计进去,是什么原因

感觉今日之前的语句有点问题,很多昨天自定义创建的ctime时间的笔记都没有汇总过来,
然后呢,修改下ctime的时间之后也是汇总不显示的。
但是用下面范围的那个语句:就可以把今天之前的笔记都统计过来

可以了,非常谢谢:pray:

能再请教下吗?
就是在这个基础上,可以加上某个标签下的范围吗。
就是在这个标签下,汇总今天之前的所有笔记(自定义时间的笔记)。
谢谢

```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))
```

嗯嗯,可以了
可以再问最后一个问题吗?
如果:
范围不是某个标签,而是某个笔记下的所有反链。「该笔记下有很多的反链」
这样也可以实现吗?
再次感谢 :pray: :pray:

不清楚你想要的需求是否是:假设有笔记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笔记里都没有显示今天之前

里面的代码是:

不知道是哪里我弄错了 :rofl: :rofl:

看不出来,不要截图,发代码,方便调试和比较差异,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))
```


这个是刚才试用的,这里不填"a笔记",而是填写c或者b笔记,那里都能显示


a笔记中有反链

b和c的笔记出链都是a笔记

嗯嗯,也不行,跟前次的情况一样,也是什么都没有出来

看这里