【问题标题】:How to filter a list by date condition?如何按日期条件过滤列表?
【发布时间】:2017-04-15 01:34:14
【问题描述】:

我正在尝试通过查找结束日期小于或等于今天日期的所有项目来过滤我的列表。

我知道在 Liquid 中,我可以使用 where: 进行过滤以查找符合条件的项目。例如,如果我想获取今天的会议列表,我可以这样做:

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

但是,当我尝试参加即将举行的会议时,我不能这样做:

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

这是因为我不想一对一地匹配一个值,而是试图根据日期比较来查找项目。我找遍了,找不到路。

如何以这种方式过滤列表?我希望我不必求助于顺序循环并在每一行上执行 if 语句。

【问题讨论】:

    标签: jekyll liquid


    【解决方案1】:

    从 Jekyll 3.2 开始,您可以使用 where_exp 并使用表达式为真的对象过滤数组,而不是使用 where

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

    您可以将site.time 替换为任何其他有效日期。

    【讨论】:

    • 不幸的是,这并没有按预期工作。这是因为您将日期对象与时间对象进行比较。我实际上认为这也是同样的事情。这是目前 Jekyll 上一个持续存在的问题。有效的解决方案实际上是扩展 Jekyll 的 SiteDrop 类并定义一个@date。 github.com/jekyll/jekyll/issues/5302
    • @Maxcell 我在发帖和工作之前已经在本地测试过,你能举一个没有的例子吗?
    • 我不太清楚为什么这个特定的项目会以这种方式工作,但是,他们的日期并没有正确地处理成一个干净的 Jekyll 站点。在这个photo 中,由于某种原因,您可以看到他们集合中的项目是一个日期对象,而站点是一个时间对象。我打开了一个新的 Jekyll 项目并确认了您的回复,我会说您是正确的,但是,在这个超级独特的原因中它不起作用。会及时通知您!
    • 标记为已接受,因为该错误存在于其他地方。
    猜你喜欢
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 2019-07-30
    相关资源
    最近更新 更多