我怎样才能在Jekyll获得序数日期?

时间:2012-12-01 23:14:16

标签: date jekyll liquid

在Jekyll,我真的希望将日期格式设为“2012年12月2日” - 即使用序数,而不仅仅是“2012年12月2日”。

我发现Ruby中有一个ordinalize函数可以执行此操作,但我没有把它与Liquid和Jekyll结合使用。

如何按照我的意愿格式化日期?

5 个答案:

答案 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)

如果您想要一个完全流动的答案,则可以执行以下操作:

  1. 创建一个包含文件,例如:ordinalsuffix.html

  2. 将以下代码放入该文件:


{% 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 %}

  1. 然后,您基本上可以像调用函数一样调用它:

{% assign numbertoordinal = 101 %}
{% include ordinalsuffix.html %}
{% assign result = numbertoordinal | append: ordinalresult %}

当然,您需要对其进行扩展以输出完全格式化的日期。但是,如果您想知道任意数字的序数后缀,则此答案很合理。