模板工具包比较日期

时间:2013-05-23 23:35:11

标签: perl if-statement template-toolkit

在模板工具包中,我想根据项目的日期是过去,未来还是今天来添加一些文本。 我从数据库中获取一个名为myDate的字段 这是一个如下所示的日期字段。 myDate:2012-12-12

在我的模板中,我试图做这样的事情。但是当我尝试时,我无法运行模板。有没有办法在模板工具包中执行此操作?

    [% USE date %]
    [% IF myDate < date.format %]
    past
    [% IF myDate > date.format %]
    future
    [% ELSE %]
    today
    [% END %]

1 个答案:

答案 0 :(得分:2)

你是在比较苹果和红毛猩猩吗?

您的myDate值是字符串还是DateTime对象?表达式的两边需要是相同的类型,并且DateTime会进行大量重载,以便您可以使用><=等来比较DateTime对象。如果表达式的一侧是对象而另一侧是字符串,则会遇到问题。

其次,没有格式化字符串的date.format返回默认的POSIX表示,根据Template::Plugin::Date '%H:%M:%S %d-%b-%Y',它几​​乎肯定不是你想要的。

因此,如果myDate是DateTime,请尝试:

[% IF myDate < date.now %]

如果它绝对是一个字符串,请尝试:

[% IF myDate < date.format('%Y-%m-%d') %]

希望有所帮助。


<强>更新

我指的是perl DateTime对象,而不是数据库中的字段是日期还是日期时间。通常,数据库日期或日期时间由ORM(DBIC或其他)对perl DateTime对象“膨胀”。您还没有告诉我们myDate知道的来源。我建议您在模板中显示myDatedate.now以进一步调试,即:

[%- "myDate = "; myDate; " date.now = "; date.now; "<br/>";
    myDate.strftime('I must be a DateTime object: %Y-%m-%d'); "<br/>";
    date.now.strftime('I must be a DateTime object: %Y-%m-%d'); "<br/>"; -%]