在Jekyll,我真的希望将日期格式设为“2012年12月2日” - 即使用序数,而不仅仅是“2012年12月2日”。
我发现Ruby中有一个ordinalize
函数可以执行此操作,但我没有把它与Liquid和Jekyll结合使用。
如何按照我的意愿格式化日期?
答案 0 :(得分:6)
我通过编写以下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
然后 - 安装了{{ post.date | pretty }}
Ruby gem - 我可以在我的网站中使用{{1}},一切都很顺利。
答案 1 :(得分:4)
对于使用GitHub页面的人:
如果您在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
答案 2 :(得分:3)
在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
答案 3 :(得分:3)
Jekyll 3.8支持开箱即用的序数日期。我在Forestry's blog上写了一篇文章,介绍了所有的更改,但这里有一个关于如何使用序数日期的快速教程。
{{ page.date | date_to_long_string: "ordinal", "US" }}
将输出April 24th, 2018
。
{{ page.date | date_to_string: "ordinal", "US" }}
将输出Apr 24th, 2018
。
{{ page.date | date_to_long_string: "ordinal" }}
将输出24th April 2018
。
{{ page.date | date_to_string: "ordinal" }}
将输出24th Apr 2018
。
答案 4 :(得分:0)
如果您想要一个完全流动的答案,则可以执行以下操作:
创建一个包含文件,例如: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 %}
当然,您需要对其进行扩展以输出完全格式化的日期。但是,如果您想知道任意数字的序数后缀,则此答案很合理。