如何比较nunjucks中的日期?

时间:2019-07-01 08:11:50

标签: nunjucks

所以我有一个数组对象。

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 :(得分:0)

您可以定义全局函数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);

P.S。通过日期是一个字符串,例如9/7/2019是一个坏主意。日期解释(dd.mm.yyyymm.dd.yyyy)取决于浏览器设置。我建议使用unix-epoch:new Date().getTime()