自己想写一段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')+"小时")
但这样计算的结果显示出来明显不对:
不知道是哪里的问题?或者有其他方式能计算这个更新时间呢?谢谢
第一个有点没看懂,不知道你想写的是 dataview 还是 dataviewjs,如果是前者 path
不知道哪来,如果是后者又根本不像js语言,而应该这么写 dv.execute(`table date(today)-file.mday as "最近更新" from ${path}`)
第二点,moment()
不能传入DateTime
变量,否则 moment()
会返回今天 0 点的时间
正确做法是转换成字符串或数字变量(其实我的文章提了的 )
1 个赞
谢谢回复!问题已解决,还是得仔细学习