Дата Математика/Манипуляция в 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