更改ICARUS主题时间显示方法
ICARUS是一款近乎完美的主题,加载速度快且动画很流畅,但某个小地方也需要手动完善一下。
比如一篇文章显示的日期,默认的样式是 A FEW MINUTES AGO, A MONTH AGO 等等,这难以给我们留下发布日期的直观数据,而且时间一长后便会极为不精确。本篇文章将介绍如何更改以及背后的原理。
更改方式
其实非常简单,首先定位到主题根目录下的 layout/common/article.ejs,将其复制一份并重命名作为备份。然后用文本编辑打开 article.ejs 将第14行的
1 | <time class="level-item has-text-grey" datetime="<%= date_xml(post.date) %>"><%= date(post.date) %></time>> |
修改为
1 | <span class="level-item has-text-grey"><%= date(post.date) %></span> |
保存后重新生成即可。
原理
<%= date_xml(post.date) %>
和 <%= date(post.date) %>
都是在调用Hexo提供的本地变量,即文章的发布时间。但是到目前为止,所有主流浏览器均不支持<time>
标签^1,也就是说,一段文本套上<time>
标签后没有任何效果。
但是当我把<time></time>
中间的变量<%= date(post.date) %>
改成其它任意字符甚至删掉,对网页没有任何影响,因此,可以推测出重要的是<time>
标签内的datetime
属性,我尝试将其改为2019-01-01
后,果然文章时间全都变成了A YEAR AGO。
因此我猜测主题作者可能在代码的某处重写了<time>
标签(没有任何证据的瞎猜),根据datetime
属性计算和当前时间的差值。所以,只要不是<time>
标签就不会受此规则约束,但是又要应用CSS样式,于是将其换成<span>
标签最为合适^2。
并且因为不再需要datetime
属性计算差值,该属性可以直接删去,直接由中间的变量<%= date(post.date) %>
提供文章发布时间。