更改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) %>提供文章发布时间。