杰基尔在前言中不稳定的日期识别



我最近开始尝试Jekyll(3.0.1版本,在Ubuntu上使用Ruby 2.2.3p173),我不确定是发现了错误还是PEBKAC。

我有几篇文章,我想用它们的标题中定义的"日期"值进行排序,比如:

---
title: Whatever
category: foo
date: 2014-09-7
---

我一直在使用以下Liquid标签来生成排序的集合:

{% assign sorted=site.pages | where: 'category', include.category | sort: 'date' %}

它运行得很好,但当我添加文章时,Jekyll突然爆炸,并显示了以下错误消息:

"液体异常:液体错误:在(文件名)中比较Jekyll::Page与Jekyll::Page失败"

经过大量的实验,我写了一个自定义插件,但它仍然不起作用。然而,检查集合发现,date属性的值有时会神奇地转换为日期对象,但大多数情况下它是一个字符串。

我想不出的部分来了。

"2015-12-10"有什么特别之处?

"2015-12-9"仍然是一个字符串,但"2015-15-10"变成了一个日期对象。实际上,如果月份和日期都是两位数,Jekyll就会爆炸。

有趣的是,如果我通过引用日期值来修改有问题的主题,它就会按预期开始工作:

---
title: Whatever 2
category: foo
date: "2015-12-15"
---

我在这里错过了什么?

Jekyll如何看待前物质值

dates:
  - "2015-12-21" # String
  - 2015-12-21   # Date
  - 2015-12-1    # String
  - 2015-12-01   # Date
  - 2015-12-21 12:21:22  # Time
  - 2015-12-21 12:21:22 +0100 # Time

对字符串排序

如果将类似date: "yyyy-mm-dd"的"date"与类似date: "yyyy-mm-d"的"dates"混合排序,则此操作将失败。

---
datesAsStrings:
  - "2015-12-1"
  - "2015-12-3"
  - "2015-12-12"
---
{% assign sortedDates = page.datesAsStrings | sort %}
{% for date in sortedDates %}<p>{{ date }}</p>{% endfor %}

退货:

2015-12-1
2015-12-12
2015-12-3

日期排序

如果对有效日期(yyyy-mm-dd)进行排序,则可以进行排序。

---
datesAsDates:
  - 2015-12-01
  - 2015-12-03
  - 2015-12-21
---
{% assign sortedDates = page.datesAsDates | sort %}
{% for date in sortedDates %}<p>{{ date }}</p>{% endfor %}

退货:

2015-12-01
2015-12-03
2015-12-21

把它炸了

如果混合日期(yyyy-mm-dd)和字符串(yyyy-mm-d

mixed:
  - 2015-12-1
  - 2015-12-03
{% assign sortedDates = page.mixed | sort %}
{% for date in sortedDates %}<p>{{ date }}</p>{% endfor %}
Error: Liquid error: comparison of String with Date failed

或使用Times(yyyy-mm-dd hh:mm:ss

---
datesAsDatesOrTime:
  - 2015-12-01
  - 2015-12-03 12:12:12 +0100
---
{% assign sortedDates = page.datesAsDatesOrTime | sort %}
{% for date in sortedDates %}<p>{{ date }}</p>{% endfor %}
Error: Liquid error: comparison of Date with Time failed

这和您在对具有不同日期类型的页面进行排序时遇到的问题相同。

结论

  • 在前面的内容中,Jekyll的有效日期mydate: yyyy-mm-dd,而不是mydate: "yyyy-mm-dd"mydate: yyyy-mm-d
  • 只能对相同类型的元素进行排序
  • 只能对每个具有相同类型的变量的页面、帖子或集合进行排序

最新更新