这让我很疯狂。
我有这个集合resources
:
# _config.yml
collections:
resources:
output: true
permalink: /resources/:name/
他们都有约会:
# /_resources/example.md
---
title: Learn the Web
date: 09-04-2013
---
页面生成,如果我尝试显示它的日期,它会正确显示,但我也想按日期排序,但它不起作用。我做错了什么?
{% assign sortedResources = site.resources | sort: 'date' %} <!-- Doesn't work -->
{% for resource in sortedResources %}
<div>
{{resource.title}}
<small>{{resource.date | date: "%d %b %Y"}}</small> <!-- Works -->
</div>
{% endfor %}
我正在使用:
▶ ruby --version
ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux]
▶ jekyll --version
jekyll 2.5.3
由于
答案 0 :(得分:6)
我目前遇到了与收藏相同的问题。
在尝试对dd/mm/yyyy
或dd-mm-yyyy
等欧洲格式的日期进行排序时,我会得到一个字符串排序。即使在timezone: Europe/Paris
文件中设置了_config.yml
。
获取按日期排序的集合的唯一方法是使用ISO格式yyyy-mm-dd
。
# /_resources/example.md
---
title: Learn the Web
date: 2013-04-09
---
现在这种情况正在发挥作用。
修改 - 这就是jekyll管理&#39; date&#39;:
的方式date: "2015-12-21" # String
date: 2015-12-1 # String D not zero paded
date: 01-12-2015 # String French format
date: 2015-12-01 # Date
date: 2015-12-21 12:21:22 # Time
date: 2015-12-21 12:21:22 +0100 # Time
如果您不需要时间,您可以坚持date: YYYY-MM-DD
格式。
而且你必须在整个系列中保持一致。如果混合字符串,日期和/或时间液体将引发错误,如Liquid error: comparison of Date with Time failed
或Liquid error: comparison of String with Date failed
答案 1 :(得分:6)
如果您的收藏品在前面的内容中有有效的date
(ISO 8601 format),则会自动按日期排序,最早排序。
如果您想首先输出更多近期商品,可以reverse
订购此类订单:
{% assign sorted = site.resources | reverse %}
{% for item in sorted %}
<h1>{{ item.name }}</h1>
<p>{{ item.content }}</p>
{% endfor %}
答案 2 :(得分:2)
我得到了:按日期字符串排序的资源(例如19-06-2015
),这是不正确的。
我创建了自定义过滤器:
# _plugins/filters.rb
module Jekyll
module DateFilter
require 'date'
def date_sort(collection)
collection.sort_by do |el|
Date.parse(el.data['date'], '%d-%m-%Y')
end
end
end
end
Liquid::Template.register_filter(Jekyll::DateFilter)
像这样使用:
{% assign sortedResources = site.resources | date_sort | reverse %}
{% for resource in sortedResources %}
<div>{{resource.title}}</div>
{% endfor %}