在我的Jekyll网站中,我有一个集合talks
,在前面有一个名为startDate
的属性。我已将startDate
格式%Y-%m-%d
格式化为---
startDate: 2017-10-29
---
,所以我的前面的内容如下:
startDate
如果site.time
之后有任何{% assign currentDate = site.time | date: "%Y-%m-%d" %}
,我希望显示一个名为即将举行的会谈的部分。到目前为止,我有这个:
for
在talk.startDate
循环中,我可以打印currentDate
和{% assign upcoming = site.talks | where_exp: "startDate", "startDate > currentDate" %}`
{% if upcoming.size > 0 %}
<h1>Upcoming talks</h1>
...
{% endif %}
并显示每个的值,并且它们在同一个格式中。但我无法做的就是比较它们。我真的很想这样做:
size
但是,当我upcoming
和past
{与upcoming
相同但startDate < currentDate
}时{{1}}时,它们都评为0这告诉我在我的过滤器中实际比较的日期并没有。
任何人都可以帮我解决这个问题吗?
答案 0 :(得分:1)
请阅读这篇文章:In Jekyll, how to show "posts from last week"。他们试图做同样的事情(仅在过去而不是将来)。请注意,您要做的事情需要Jekyll每天构建。这不是一个非常现实的情况。 javascript solution会更好。
javascript解决方案要求您在列表中添加自定义属性,如下所示:
{% for talk in upcoming %}
<li date="{{ talk.startDate }}">{{ talk.title }}</li>
{% endfor %}
然后,使用jQuery(或vanilla js)隐藏旧帖子:
// loop through all list items with a date
$('li[date]').each(function(){
// create a postDate in a date object
var startDate = new Date($(this).attr('date'));
// compare dates and hide old posts
if(startDate<Date.now()) $(this).hide();
});
答案 1 :(得分:0)
未说出口的问题是:如何比较jekyll或Liquid中的日期?
这是我能想到的最简单的解决方案:
{%- assign buildTimeInSecondsInEpoch = site.time | date: "%s" | plus: 0 -%}
这会创建一个可以进行比较的整数变量。例如:
{%- assign pagesForPublishing = "" | split: "" -%}
{%- for ape in site.pages -%}
{%- assign pageDateInSecondsInEpoch = ape.date | date:"%s" | plus: 0 -%}
{%- if pageDateInSecondsInEpoch < buildTimeInSecondsInEpoch -%}
{%- assign pagesForPublishing = pagesForPublishing | push: ape -%}
{%- endif -%}
{%- endfor -%}
此外,Jekyll将不会处理将来有日期的帖子,以允许使用--future
选项(在构建或服务上)。
页面文件将由jekyll处理,无论日期如何。