5

Jekyllでは、日付の形式を「2012年12月2日」ではなく、「2012年12月2日」、つまり序数にしたいのです。

これを行うためにRubyで利用できる関数があるordinalizeようですが、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)

facetsその後、 Ruby 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ます)。つまり、クリストファーの回答を使用する場合は、サイトをローカルで構築する必要があります。次に、_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 に答える