如何将front-matter中的日期与site.date进行比较

时间:2017-10-16 21:20:01

标签: jekyll liquid

在我的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

但是,当我upcomingpast {与upcoming相同但startDate < currentDate}时{{1}}时,它们都评为0这告诉我在我的过滤器中实际比较的日期并没有。

任何人都可以帮我解决这个问题吗?

2 个答案:

答案 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处理,无论日期如何。