遇到的问题
尝试在Obsidian里绘制甘特图进行项目进度管理。
普通输入方式,例如mermaid->gantt和gantt需要手动输入,长时间使用下来感觉比较繁琐。尝试寻找一种能够直接生成的办法。
受用户@lazyloong的启发,尝试使用dv.paragraph()对gantt部分进行渲染的方法。下面是我遇到的问题:
问题一:时间数据读取与处理
时间读取可以使用dv.pages().map(p=>p.file.cday)或dv.pages().map(p=>p.mday)读取创建时间和最新一次修改时间两个参数,前者可以作为开始时间,后者可以作为结束时间。读取没问题,但是读取出来的数据包含小时部分,即yyyy-MM-ddThh:mm:ss,这部分不去除的话就无法直接输入gantt部分。
目前的解决办法是分别读取cday.year,cday.month,cday.day三部分,随后重新构建日期。请问各位还有更优雅的方法吗?
问题二:gantt配置问题
在mermaid->gantt中,完整的进度条格式为name: state, start_date, end_date或name:state, start_date, during。参考@layeloong的代码,start_date和end_date可以使用${cday}输入,但是在实际的使用过程中发现,gantt不能同时读取两个时间。
效果为:
test: active, ${cday}, 2024-03-28
test: active, ${cday}, ${mday}
单独输出二者时间并无异常,因此问题可能出在gantt中,存疑。
问题三:时间排序问题
dv.pages(source).map(p=>p.file.cday)
可以返回所有文件(source)的创建日期,返回的结果是一个Dataview列表,但其中的内容并没有排序,为后续的索引带来困扰。请问各位有什么好方法吗?
还请各位多多指点!非常感谢!
致谢
感谢@lazyloong提供的思路与代码示例。
其他
其他类型的Gantt脚本: Automatic Gantt Chart from Obsidian Tasks & Dataview - Share & showcase - Obsidian Forum