Jekyll日期格式化是如何工作的?

112

我正在使用Jekyll生成一个简单的网站。

我想将日期字段显示为格式为2011年9月12日

我通过一些创意的谷歌搜索找到了一些日期格式操作,但没有找到任何可以获取月份名称的内容。我现在有的是{{ page.date| date: "%Y年%m月%d日" }},它会输出2011年09月12日,但这不完全是我想要的。

是否有方法可以在Jekyll中以名称形式获取月份?

或者,如果没有,是否有关于日期属性的任何文档?


有趣的过滤器是 date_to_stringdate_to_xmlschema(参见http://jekyllrb.com/docs/templates/)。 - Martin Thoma
我找到的最全面的jekyll/liquid日期格式化文档:http://alanwsmith.com/jekyll-liquid-date-formatting-examples - joce
6个回答

187

解决方案

这个输出过滤器:

{{ page.date | date: "%-d %B %Y" }}

生成格式如下的日期:

9 September 2013
请确保在日期格式中的天数格式化标记%-d前不要漏掉减号-。如果没有它,数字小于十的日期将具有前导零,例如09 September 2013
有关各个日期格式化标记的详细信息可以在Liquid“输出标签和过滤器”文档页面上找到。
更多信息:
我编写了一个Jekyll日期格式化示例集。它提供了几种格式的示例,应该足以以任何您想要的方式进行格式化。一些示例包括:
  • 2013-09-23
  • 2013年9月23日
  • 2013年9月23日
  • 2013年7月4日(即将名称更改为其他语言,如“Juli”而不是“July”)。
尽情享受!

@Ian - 我在这里发布了另一个答案,回答了第1、2、3个问题。我还更新了我的答案,指向一组日期格式化片段的参考。 - Alan W. Smith
不要使用 plus: '0'。请使用:{{ page.date | date: "%-m-%d-%Y" }}。注意 %m 之间的连字符:%-m - Nowaker
1
@DamianNowak - 感谢您指出使用%-m的方法。这样更加简洁。我已经更新了答案并将尽快更新我的参考文章。 - Alan W. Smith
日期格式文档已移至:http://docs.shopify.com/themes/liquid-documentation/filters/additional-filters#date - Marcus Whybrow
我更新了指向日期筛选器的链接。感谢您指出这个更改。 - Alan W. Smith
显示剩余3条评论

18

Jekyll为liquid添加了过滤器扩展。请参见此处。只需运行date_to_long_string过滤器,即可显示所需的日期格式。

来自链接:


日期转长字符串

将日期格式化为长格式(如“2011年1月27日”)。

{{ site.time | date_to_long_string }} => 2008年11月17日


7

Jekyll 3.8支持基于序号的日期格式。以下是输出月份的方法:

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


3

如果您需要像2011年9月12日这样的日期,请使用{{ page.date| date: "%d %B %Y" }},可以参考Jekyll日期格式化指南进行快速格式化。


3
尝试使用'%B',它代表“完整月份名称(例如:一月)”。 搜索文档以查找strftime函数,通常用于将日期转换为字符串。

3

如果您需要自定义解决方案,可以编写一个Jekyll插件来按照您想要的格式格式化日期,例如(以下示例适用于意大利日期):

module Jekyll
    module ItalianDates
        MONTHS = {"01" => "gennaio", "02" => "febbraio", "03" => "marzo",
                "04" => "aprile", "05" => "maggio", "06" => "giugno",
                "07" => "luglio", "08" => "agosto", "09" => "settembre",
                "10" => "ottobre", "11" => "novembre", "12" => "dicembre"}

        # http://man7.org/linux/man-pages/man3/strftime.3.html
        def italianDate(date)
            day = time(date).strftime("%e") # leading zero is replaced by a space
            month = time(date).strftime("%m")
            year = time(date).strftime("%Y")
            day+' '+MONTHS[month]+' '+year
        end

        def html5date(date)
            day = time(date).strftime("%d")
            month = time(date).strftime("%m")
            year = time(date).strftime("%Y")
            year+'-'+month+'-'+day
        end
    end
end

Liquid::Template.register_filter(Jekyll::ItalianDates)

只需将其保存到文件中,例如_plugins/italian_dates.rb,然后在模板中根据需要使用:

<time datetime="{{page.date | html5date}}">{{page.date | italianDate}}</time>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接