1

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

在我的模板中,我正在尝试做这样的事情。但是当我尝试时,我无法让模板运行。有没有办法在模板工具包中做到这一点?

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

1 回答 1

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/>"; -%]
于 2013-05-23T23:55:08.193 回答