Asciidoc中如何让{docdatetime}返回被包含章节文件的修改时间?
解决Asciidoc章节文件获取自身最后修改时间的问题
默认情况下,{docdatetime}属性返回的是顶层文件(比如你的top.adoc)的最后修改时间,要让每个章节文件显示自身的修改时间,可以用以下几种可行方案:
方案1:使用Asciidoctor内置包含文件属性
Asciidoctor会为被包含的文件自动生成上下文属性,直接在章节文件中使用{included-file-last-modified}即可获取该文件的最后修改时间,还能通过格式化语法调整显示样式:
在章节文件(如chapter1.adoc)末尾添加:
[small] 最后更新:{included-file-last-modified?date=yyyy-MM-dd HH:mm}
该属性仅在被包含的文件上下文内有效,顶层文件调用会返回空值,完全适配多章节独立文件的场景。
方案2:手动传递自定义属性(统一格式控制)
如果需要在顶层文件统一控制所有章节的日期显示格式,可以在include章节时手动传递修改时间属性:
- 在
top.adoc中include章节时,传递自定义属性:
include::chapter1.adoc[last-updated={include-file-last-modified?date=yyyy-MM-dd}]
- 在对应的章节文件中引用该属性:
[small] 最后更新:{last-updated}
这种方式可以避免在每个章节文件中重复设置日期格式,适合需要统一规范的场景。
方案3:结合Git获取最后提交时间(协作场景首选)
如果文档托管在Git仓库中,想要显示章节文件最后一次被提交的时间(而非本地修改时间),可以借助Asciidoctor的Git扩展:
在章节文件中添加:
[small] 最后更新:{git-rev-time($included-file)?date=yyyy-MM-dd HH:mm}
需要提前安装asciidoctor-git gem(gem install asciidoctor-git),且当前工作目录处于Git仓库内。
注意事项
- 以上方案均基于Asciidoctor工具,原生Asciidoc功能有限,建议使用Asciidoctor作为渲染引擎。
- 日期格式化语法支持常见的格式符,如
yyyy(四位年份)、MM(两位月份)、dd(两位日期)等。
内容的提问来源于stack exchange,提问作者David Davó
相关产品推荐
相关产品推荐

