2017-10-16 21 views
1

在我的Jekyll站点中,我有一个集合talks,它有一个属性,名为startDate。我在实际的扉页格式化startDate%Y-%m-%d,所以我前面的问题是这样的:我如何比较前台日期到site.date

--- 
startDate: 2017-10-29 
--- 

我想展现一个叫做此次会谈部分,如果有任何startDate S中的后site.time。到目前为止,我有这样的:

{% assign currentDate = site.time | date: "%Y-%m-%d" %} 

for环,我可以打印talk.startDatecurrentDate并显示每个值和他们在同一个甲。但我不能做的是比较它们。我真的很想这样做:

{% assign upcoming = site.talks | where_exp: "startDate", "startDate > currentDate" %}` 

{% if upcoming.size > 0 %} 
    <h1>Upcoming talks</h1> 
    ... 
{% endif %} 

但是,当我得到size两个upcomingpast(这是一样的upcoming但如果startDate < currentDate),他们都评价为0,这告诉我的日期AREN实际上在我的过滤器中进行比较。

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

回答

1

请仔细阅读此文章:In Jekyll, how to show "posts from last week"。他们试图做同样的事情(只在过去而不在将来)。请注意,您正在尝试做的事情需要Jekyll每天构建。这不是一个非常现实的场景。 A javascript solution会更好。

JavaScript解决方案需要您自定义属性添加到列表中,这样的:

{% for talk in upcoming %} 
    <li date="{{ talk.startDate }}">{{ talk.title }}</li> 
{% endfor %} 

然后,使用jQuery(或香草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(); 
}); 
+0

我可以使用cron作业每天构建网站,因此我将使用类似于第一个建议。谢谢。 – i7nvd

+0

@ i7nvd出于好奇:你如何运行/配置你的cron? – JoostS

0

的不言而喻的问题是:如何比较日期在jekyll或液体?

这是我能想出的最简单的方法:

{%- 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 -%} 

此外,杰基尔不会在将来的日期处理的帖子,允许这个使用--future选项(在编译或服务)。

无论日期如何,页面文件都将由jekyll处理。