在 Jekyll 中,我真的希望日期格式为“2012 年 12 月 2 日”——即使用序数,而不仅仅是“2012 年 12 月 2 日”。
我看到ordinalize
Ruby 中有一个函数可以做到这一点,但我没有运气将它与 Liquid 和 Jekyll 结合起来。
如何按我的意愿格式化日期?
我通过编写以下 Jekyll 插件解决了这个问题,我将其放置在_plugins
具有任意名称的目录中,例如date.rb
:
require 'date'
require 'facets/integer/ordinal'
module Jekyll
module DateFilter
def pretty(date)
"#{date.strftime('%e').to_i.ordinalize} #{date.strftime('%B')} #{date.strftime('%Y')}"
end
end
end
Liquid::Template.register_filter(Jekyll::DateFilter)
然后——安装了facets
Ruby gem——我可以{{ post.date | pretty }}
在我的站点中使用,一切都很好。
在 Jekyll 3.8 或更高版本(例如 GitHub 页面)中,您可以使用新的date_to_string
过滤器选项并编写:
{{ page.date | date: "%I:%M %p on %A" }}
{{ page.date | date_to_string: "ordinal" }}
这将输出:12:23 PM on Friday 16th Jan 2015
对于使用 GitHub Pages 的人:
如果您在 GitHub 上托管您的网站,您将无法使用模块(我相信 GitHub使用排除模块jekyll build
的--safe
选项运行),这意味着如果您要使用 Christopher 的答案,您必须在本地构建您的网站并且然后将 _site 目录的内容推送到 GitHub。
这是一个仅使用 Liquid 获取序数/日期的解决方案,它允许您以通常的方式使用 GitHub Pages + Jekyll:
{% capture day %}{{ page.date | date: "%-d" }}{% endcapture %}
{% capture dayLastTwoDigits %}{{ day | modulo: 100 }}{% endcapture %}
{% if dayLastTwoDigits >= "11" and dayLastTwoDigits <= "13" %}
{% assign ordinal = "th" %}
{% else %}
{% capture dayLastDigit %}{{ day | modulo: 10 }}{% endcapture %}
{% case dayLastDigit %}
{% when "1" %}
{% assign ordinal = "st" %}
{% when "2" %}
{% assign ordinal = "nd" %}
{% when "3" %}
{% assign ordinal = "rd" %}
{% else %}
{% assign ordinal = "th" %}
{% endcase %}
{% endif %}
{% capture ordinalDay %}{{ day | append: ordinal }}{% endcapture %}
<p class="post-meta">{{ page.date | date: "%I:%M %p on %A" }} {{ ordinalDay }} {{ page.date | date: "of %b, %Y" }}{% if page.author %} • {{ page.author }}{% endif %}{% if page.meta %} • {{ page.meta }}{% endif %}</p>
这将输出如下内容:
12:23 PM on Friday 16th of Jan, 2015
如果您想要一个完全流动的答案,您可以执行以下操作:
创建一个包含文件,例如:ordinalsuffix.html
将以下代码放入该文件中:
{% assign numbertoordinal = (numbertoordinal | default: 0) | plus: 0 | modulo: 100 %}
{% assign ordinalresult = "th" %}
{% case numbertoordinal %}
{% when 1 or 21 or 31 or 41 or 51 or 61 or 71 or 81 or 91 %}
{% assign ordinalresult = "st" %}
{% when 2 or 22 or 32 or 42 or 52 or 62 or 72 or 82 or 92 %}
{% assign ordinalresult = "nd" %}
{% when 3 or 23 or 33 or 43 or 53 or 63 or 73 or 83 or 93 %}
{% assign ordinalresult = "rd" %}
{% endcase %}
{% assign numbertoordinal = 101 %}
{% include ordinalsuffix.html %}
{% assign result = numbertoordinal | append: ordinalresult %}
当然,您需要扩展它以输出完全格式化的日期。但是,如果您想知道任意数字有什么序数后缀,这是一个相当干净的答案。