2017-04-15 89 views
2

我想通過查找結束日期小於或等於今天日期的所有項目來過濾我的列表。如何按日期條件篩選列表?

我知道在液體中,我可以使用where:進行過濾以找到符合條件的項目。例如,如果我想獲得今天的會議的列表,我可以這樣做:

{% assign upcoming_conferences = (site.conferences | where: 'date_end', ??? | sort: 'date_start') %} 

這就是:

{% assign todays_conferences = (site.conferences | where: 'date_end', today) %} 

但是,當我試圖讓即將舉行的會議,我不能這樣做因爲我並不是想要一對一地匹配一個值,但我正在嘗試根據日期比較來查找項目。我搜遍了所有,無法找到一個方法。

如何以這種方式篩選列表?我希望我不必訴諸循環順序,並在每一行做if語句。

回答

4

從傑基爾3.2,而不是使用where,你可以使用where_exp和陣列與在該表達式爲true的對象進行過濾:

{% assign upcoming_conferences = (site.conferences | where_exp: 'date_end', 'date_end < site.time' | sort: 'date_start') %} 

您可以與任何其他有效之日起代替site.time

+1

不幸的是,這不能按預期工作。這是由於您正在比較Date對象與Time對象。我其實也認爲這也是一樣的。目前這是Jekyll正在進行的一個問題。這個解決方案實際上是擴展了Jekyll的SiteDrop類並定義了一個@date。 https://github.com/jekyll/jekyll/issues/5302 – Maxcell

+0

@Maxcell我已經在發佈和工作之前在本地進行了測試,您能舉一個例子嗎? – marcanuy

+0

我不太清楚爲什麼這個特定的項目會按照它的方式工作,但是,他們的日期並沒有正確地處理成一個乾淨的Jekyll站點。在[照片](http://imgur.com/a/hI6AP)中,您可以看到出於某種原因,其集合中的項目是Date對象,並且該站點是Time對象。我打開了一個新的Jekyll項目並確認了你的迴應,然後我會說你是正確的,但是,在這個超級獨特的事業中,它不起作用。會及時向大家發佈! – Maxcell