Жидкостный фильтр по дате (Джекилл) - PullRequest
0 голосов
/ 27 марта 2020

Я пытаюсь отфильтровать посты по указанным c датам в Джекилле. Например, я хочу подать все сообщения сегодня, за последние 30 дней и все до этого.

Однако я сталкиваюсь с несколькими проблемами:

  1. Как можно Я получаю текущую дату, начиная с 00:01 AM
  2. Как использовать where_exp для фильтрации по этой дате

В настоящее время я пытался сделать что-то подобное, но это преобразует дату в строку и не может использоваться в where_exp:

{% capture thirty_days_ago %}{{'now' | date: '%s' | minus: 2592000 }}{% endcapture %}
{% assign last_30_days_posts = site.posts | where_exp:"post", "post.posted_on > thirty_days_ago" %}

Liquid error (line 22): comparison of Time with String failed in index.html

Я мог бы сделать простой проверяйте при просмотре сообщений, но перед этим предпочли бы использовать фильтр.

{% capture thirty_days_ago %}{{'now' | date: '%s' | minus: 2592000 }}{% endcapture %}
{% for post in site.posts %}
    {% capture post_date %}{{ post.posted_on | date: '%s' | plus: 0 }}{% endcapture %}

    {% if job_date > thirty_days_ago %}
        {% include components/job.html job=job %}
    {% endif %}
{% endfor %}

1 Ответ

0 голосов
/ 29 марта 2020

Для тех, кто ищет решение; В итоге я написал собственный фильтр:

def last_month_filter(posts)
    now = DateTime.now
    today = DateTime.new(now.year, now.month, now.day, 0, 0, 0, now.zone)
    target = today - 30

    posts.select do |post|
        postedOn = post.data['posted_on'].to_datetime

        if postedOn < today && postedOn > target
            post
        end
    end
end

Использование:

{% assign last_30_days = site.posts | last_month_filter | sort:"posted_on" | reverse %}
...