【已解决】dataviewjs路径字符串变量检索问题

自己想写一段dataviewjs代码,想要实现的功能是通过其他方式获取一个文件夹路径,名为pathName的字符串变量,检索这个文件夹内的笔记数,格式如下
dv.pages(pathName).length
这个代码不能被执行,查官方文档说路径名须以双括号括起来,如dv.pages('"folder/subfolder"')形式,但没有说明字符串是变量名时该如何传入?试了很多方式在pathName加前后缀,都无法正确查询,求问正确的查询语句格式应该是什么样,谢谢!

文件夹名称应该被双引号包裹,就像你查到的文档,比如 dv.pages('"'+path+'"'),我个人喜欢这么写 dv.pages(`"${path}"`),当然你应该会好奇为什么有这么奇怪的写法,其实比较一下dataview就会明白,一个标准的dataview差不多长这样

```dataview
LIST
FROM "path" and #tag
```

这时很容易就发现作者只是保持了两个功能的统一

1 个赞

谢谢,按您的解释,能实现传入变量了。而且看了您写的文章,学到了不少。
不过现在还有两个问题:
1.变量能否传入DQL查询语句中呢?dataviewjs的代码和变量应该是不支持在DQL查询中使用?,比如我想实现将path传入:

table date(today)-file.mday as "最近更新" from '"'+path+'"'

上面这么写试了下是不行的,不知道有没有正确的写法。

2.还是上面的DQL代码,可以计算文件上次更新距今天有几天,我想把这个代码也在dataviewjs中实现,如下:

let pgs = dv.pages(`"${path}"`).file
dv.table(
	["文件","最近更新"],
	pgs
	.sort(b=>b.mday,"desc")
	.map(b=>[b.link,Date()-b.mtime])
)

但是只能获取到文件的上次修改日期,没有查到dataviewjs中进行日期计算的方式。
我自己查的可以基于moment.js作时间计算,用文件创建时间ctime自己试了下,计算方式如下:

let nowtime = moment().format("YYYY-MM-DD HH:mm:ss")
let ctime=dv.current().file.ctime
dv.paragraph(nowtime)
dv.paragraph(ctime)
dv.paragraph(moment(nowtime).diff(moment(ctime),'hour')+"小时")

但这样计算的结果显示出来明显不对:
image

不知道是哪里的问题?或者有其他方式能计算这个更新时间呢?谢谢

第一个有点没看懂,不知道你想写的是 dataview 还是 dataviewjs,如果是前者 path 不知道哪来,如果是后者又根本不像js语言,而应该这么写 dv.execute(`table date(today)-file.mday as "最近更新" from ${path}`)

第二点,moment() 不能传入DateTime 变量,否则 moment() 会返回今天 0 点的时间
image
正确做法是转换成字符串或数字变量(其实我的文章提了的 :frowning_face:

1 个赞

谢谢回复!问题已解决,还是得仔细学习 :grin: