5

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

我看到ordinalizeRuby 中有一个函数可以做到这一点,但我没有运气将它与 Liquid 和 Jekyll 结合起来。

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

4

4 回答 4

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)

然后——安装了facetsRuby gem——我可以{{ post.date | pretty }}在我的站点中使用,一切都很好。

于 2012-12-01T23:14:16.413 回答
5

在 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

于 2018-04-05T13:30:34.983 回答
4

对于使用 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

于 2015-01-23T11:28:52.933 回答
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 %}

当然,您需要扩展它以输出完全格式化的日期。但是,如果您想知道任意数字有什么序数后缀,这是一个相当干净的答案。

于 2018-12-11T04:39:41.537 回答