Jekyll 日期格式如何工作?

Posted

技术标签:

【中文标题】Jekyll 日期格式如何工作?【英文标题】:How does Jekyll date formatting work? 【发布时间】:2011-11-15 18:26:00 【问题描述】:

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

我希望日期字段以12 September 2011 的格式显示。

通过一些创造性的谷歌搜索,我发现了一些日期格式操作,但似乎没有什么能让我得到月份的名称。我所拥有的是 page.date| date: "%m-%d-%Y" ,它让我输出为09-12-2011,但并不是我想要的。

有什么方法可以在 Jekyll 中将月份作为名称?

或者,除此之外,是否有任何关于日期属性的文档?

【问题讨论】:

有趣的过滤器是date_to_stringdate_to_xmlschema(见jekyllrb.com/docs/templates) 我能找到的最完整的日期 jekyll/液体日期格式化文档:alanwsmith.com/jekyll-liquid-date-formatting-examples 【参考方案1】:

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

【讨论】:

【参考方案2】:

解决方案

这个输出过滤器:

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

产生格式如下的日期:

9 September 2013

一定不要错过当天%-d 前面的减号(-)。没有它,十以下的数字将有前导零(例如09 September 2013)。

可以在Liquid "Output tags and filters" documentation page 上找到有关各个日期格式标记的详细信息。

更多信息

我整理了一个large set of Jekyll date formatting examples。它提供了几种格式的示例,并且应该提供足够的细节来以您想要的任何方式进行格式化。一些例子包括:

2013-09-23 2013 年 9 月 23 日 9 月2013 年 2 月 23 日 2013 年 7 月 4 日(即将名称更改为其他语言,例如“Juli”而不是“July”)。

享受吧!

【讨论】:

是否可以将其格式化为 NNXX 格式,即 1st 2nd 3rd 等? @Ian - 我看不到使用 Liquid 日期格式化程序执行“1st”、“2nd”等的方法。可能会加入一些额外的逻辑。为此专门发布另一个问题,看看是否有人知道。 @Ian - 我发布了another answer here,解决了第一个、第二个、第三个问题。我还在更新我的答案以指向一组日期格式 sn-ps 的参考。 不要使用plus: '0'。使用: page.date | date: "%-m-%d-%Y" 。注意% 和 m 之间的连字符:%-m @DamianNowak - 感谢您提供使用 %-m 的指针。干净多了。我已经更新了答案以反映这一点,并将尽快更新我的参考帖子。【参考方案3】:

使用 page.date| date: "%d %B %Y" 表示像2011 年9 月12 日 这样的日期,请参阅Jekyll Date Formatting 上的快速格式化指南

【讨论】:

【参考方案4】:

以防万一您需要自定义解决方案,您可以编写一个 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>

【讨论】:

【参考方案5】:

Jekyll 为液体添加了过滤器扩展。见here。您只需运行date_to_long_string 过滤器即可显示所需的日期格式。

来自链接:


日期转长字符串

以长格式格式化日期,例如“2011 年 1 月 27 日”。

site.time | date_to_long_string => 17 November 2008

【讨论】:

【参考方案6】:

试试 '%B',意思是“完整的月份名称(``January'')”

在文档中搜索 strftime,该函数通常用于将日期转换为字符串。

【讨论】:

以上是关于Jekyll 日期格式如何工作?的主要内容,如果未能解决你的问题,请参考以下文章

html Jekyll Casts - 日期格式

使用 Liquid 标记在 Jekyll 中获取今天的日期

如何替换EXCEL中日期的格式

LibreOffice:我该如何更改日期格式的工作日名称

如何格式化 JavaScript 日期

如何在 BigQuery 中以字符串格式将工作日月份转换为日期?