最近想自己做一个 hugo 的主题,结果第一天就卡关,看似很简单的日期时间显示就卡壳了很久, 现在分享一下,如何在 hugo 的模版中正常的显示日期时间
本问题应该与 go 模版对日期的处理方法有关,所以如果使用到任何版本的 go 或 hugo 都可能遇到。
首先我们日期的数据是这样子的
2019-07-13 11:43:05 +0800 CST
在 hugo 的模版中,我们一般可以用以下形式来格式化显示时间
{{ .Date.Format "Sun, Feb 11, 2018" }}
此日期格式来自这里,是不是很酷:给定一个范例,hugo就可以举一反三出日期格式, 注意形式是这个样子没错,但是实际这并不能正确显示时间,hugo 解析后,我们会得到以下结果
Sun, Feb 77, 13078
这是一个非常让人迷茫的结果,最早我认为是引用网页举例错了,于是自己整理了一下日期格式
{{ .Date.Format "2019-07-13" }}
结果如下
13079+08-711
现在比较让人怀疑的是 hugo 的解析错误或是使用不当了。
站在事后我们去看这个问题,我们更清楚为什么会是当前的情况,如果以 hugo date format error 这些关键字去搜索的话,基本是没办法找到我们想要的结果的,因为这不是一个错误,是设计如此。 这篇文章详细地以试错的方法讨论了这个问题,我们才知道, 必须以 2006年1月2日3时4分5秒 周一 下午 的格式 去描述时间的格式,hugo / go 才能正常解析我们给定的日期格式, 所以如果要描述 Sun, Feb 11, 2018 的格式,需要写成以下形式
{{ .Date.Format "Mon, Jan 02, 2006" }}
同理 2019-07-13 需要写成以下形式
{{ .Date.Format "2006-01-02" }}
是不是觉得顿时没有那么神奇了,那么为什么是 2006 年呢,我想有两个原因
当然以上只是我的猜测,完整的对应关系,上面提到的引用文章里有描述, 或者简单一点,只要记得以下一段即可
{{ .Date.Format "2006-01-02 03:04:05 PM Z0700" }}
{{ .Date.Format "06 Jan 02 Mon 15:04:05" }}
当知道这个规律后,我们再去推导之前令人迷茫的两个输出结果,是不是就不再迷茫了。
日期时间格式可能是每一个 go 程序员都遇到过的问题,但是对于一个 hugo 使用者来说, 未免不太友好,如果你正在为这个问题烦恼,希望本文会对你有所帮助。