点液日期过滤器

时间:2018-11-20 17:25:25

标签: c# dotliquid

我正在尝试计算从“现在”到提供的日期之间的日期。我发现一篇SO帖子似乎完全符合我的期望。 Shopify (liquid): Find number of days between two dates

不幸的是,当我为模型更改它时,我遇到了问题。经过调试后,我的猜测是它与应用过滤器的日期有关,在我的情况下为“减”。

如果我做类似的事情:

{{"now" | date: "%s" }}

我得到一个有效的结果。但是一旦我对其应用了过滤器:

{{"now" | date: "%s" | minus: 604800 }}

我收到“液体错误:参数计数不匹配。”

我还确保它不是减号过滤器,我尝试了如下基本数学运算:

{{ 100 | minus : 20 }}

成功打印了“ 80”。

我忘记了设置吗?我已启用这些设置。

Liquid.UseRubyDateFormat = true;
Template.NamingConvention = new DotLiquid.NamingConventions.RubyNamingConvention();

谢谢!

1 个答案:

答案 0 :(得分:1)

有了这个,{{"now" | date: "%s" }}就离“真相”不远了。这是这样的

private static void SmallTest()
{
    const string templateString = @"xxx '{{ k1 | Date : ""D""  }}' yyy";
    Template.NamingConvention = new CSharpNamingConvention();
    var t = Template.Parse(templateString);
    string output = t.Render(Hash.FromDictionary(new Dictionary<string, object>(){ { "k1", "now" } }));
    Console.WriteLine("NOW --> " + output);
}

我发现,过滤器Date是区分大小写的。 date不会捡起它。

但我认为您不能在日期上做减号。您需要的是自定义过滤器

public static class TextFilters
{
    public static string DaysFromNow(object input)
    {
        return DateTime.Now.AddDays(Convert.ToDouble(input)).ToString();
    }
}

Template.RegisterFilter(typeof(TextFilters));

用法:{{ k2 | DaysFromNow }} 渲染:

Hash.FromDictionary(new Dictionary<string, object>(){ { "k2", -10 } }));

以上所有代码均已通过测试并且可以正常工作