Как сравнить дату в nunjucks? - PullRequest
1 голос
/ 01 июля 2019

Итак, у меня есть объект массива.

var abc = [{ "title": "abc", "validUntil": "9/7/2019"];

Я не уверен, как сравнивать дату в nunjucks.Я также думаю, что это можно сделать в самом цикле.

<div>
    {% for a in abc %}
       {% if new Date(offer.validUntil) > new Date() %}
         {{a.title}}
       {% endif %}
     {% endfor %}
</div>

1 Ответ

0 голосов
/ 02 июля 2019

Вы можете определить глобальную функцию toDate

var nunjucks  = require('nunjucks');
var env = nunjucks.configure();

// returns `now` if no argument is passed 
env.addGlobal('toDate', function(date) {
    return date ? new Date(date) : new Date();
});

var html = env.renderString(`
        <div>
            {% for offer in offers %}
               {% if toDate(offer.validUntil) > toDate() %}
                 {{offer.title}}
               {% endif %}
             {% endfor %}
        </div>
    `, 
    { 
        offers: [
            {title: 'Some offer title', validUntil: '9/7/2019'},
            {title: 'Another offer title', validUntil: '1/6/2019'}
        ] 
    });

console.log(html);

Другой способ - определить пользовательский фильтр isActual

var nunjucks  = require('nunjucks');
var env = nunjucks.configure();

env.addFilter('isActual', function(offers) {
    return offers.filter(offer => new Date(offer.validUntil) > new Date());
});

var html = env.renderString(
    `
        <div>
            {% for offer in offers | isActual %}
                 {{offer.title}}
             {% endfor %}
        </div>
    `, 
    { 
        offers: [
            {title: 'Some offer title', validUntil: '9/7/2019'},
            {title: 'Another offer title', validUntil: '1/6/2019'}
        ] 
    });

console.log(html);

PS Дата прохода - это строка типа 9/7/2019 плохая идея.Значение даты (dd.mm.yyyy или mm.dd.yyyy) зависит от настроек браузера.Я рекомендую использовать Unix-эпоху: new Date().getTime().

...