【问题标题】:Template toolkit compare dates模板工具包比较日期
【发布时间】:2013-05-19 12:01:31
【问题描述】:

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

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

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

【问题讨论】:

    标签: perl if-statement template-toolkit


    【解决方案1】:

    您是在比较苹果和猩猩吗?

    您的 myDate 值是字符串还是 DateTime 对象?表达式的两边需要是相同的类型,并且 DateTime 做了很多重载,以便您可以使用&gt;&lt;= 等来比较 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/>"; -%]
    

    【讨论】:

    • 感谢您的建议。它是日期字段而不是 DateTime 字段。我现在得到一些输出,但如果我这样做 [% IF myDate
    • 我正在写回复 - 它太长了。请参阅我的更新答案。
    猜你喜欢
    • 2018-09-25
    • 1970-01-01
    • 2021-02-12
    • 2011-04-17
    • 2013-03-18
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    相关资源
    最近更新 更多