Дата Математика/Манипуляция в Liquid Template Filter

Я создаю "URL-адрес интеграции" на Desk.com, который использует синтаксис фильтра Shopify Liquid Template. Этот URL должен содержать "дату начала" и "дату окончания" для запроса, где дата начала - 7 дней назад, а дата окончания - прямо сейчас.

Я думаю, что для этого мне нужно вычесть 7 дней (604800 в эпоху времени) из объекта "сейчас", а затем применить мое форматирование, но я не могу определить правильный синтаксис для этого.

На данный момент этот синтаксис действителен и работает:

{{'now' | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}}

Вот уже 7 дней, вот лучшее, что я мог придумать (не работает):

{{'now' | minus : 604800 | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}}

Есть ли у вас какие-либо предложения по поводу правильного синтаксиса "7 дней назад" в Liquid? Буду очень признателен за любые советы!

Ответы

Ответ 1

Огромное спасибо @iveskev из команды DeskWWOW за этот ответ:

Если вы выполняете {{'now'}}, он возвращает строку "now", а не метку времени для текущего времени. Поэтому, если вы выполняете {{'now' | minus: 604800 }}, он возвращает "-604800", а не текущее время unix минус 604800. Когда вы используете фильтр date, тогда жидкость поднимает то, что вы ссылаетесь на текущее время, и выводит время в виде строки. Однако, даже если мы получим "теперь для вывода текущей даты, мы все равно вычитаем из строки и поэтому будем возвращать с" -604800 ". Единственный момент, когда математика на строке работает правильно, - это то, что укуса есть только число.

Итак, чтобы получить правильную дату, сначала нам нужно получить временную метку unix, сделать вычитание, а затем переформатировать в желаемый formate. Вы можете использовать %s для получения времени unix. Итак, чтобы получить текущее время в unix, это будет: {{'now' | date: '%s' }}

В этот момент вы можете выполнить вычитание, а затем форматировать время правильным образом. Мы можем сделать это все сразу в следующем утверждении:

{{'now' | date: "%s" | minus : 604800 | date: "%b %d, %Y %I:%M %p -0500" | uri_encode | replace:"+","%20"}}

Ответ 2

для тех, кто использует liquidjs, я не мог найти способ без нового фильтра, поэтому я сделал один:

daysAgo = (input) ->
  date = new Date()
  date.setDate(date.getDate() - parseInt(input, 10))
  date

parser.registerFilter('days_ago', (value) -> daysAgo(value))

затем делать:

{{ 1 | day_ago | date "%Y-%m-%d" }}
2019-05-02

Я разместил вопрос о репозитории на Liquidjs: https://github.com/harttle/liquidjs/issues/125