首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板工具包比较日期

模板工具包比较日期
EN

Stack Overflow用户
提问于 2013-05-24 07:35:11
回答 1查看 1.7K关注 0票数 1

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

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

代码语言:javascript
复制
    [% USE date %]
    [% IF myDate < date.format %]
    past
    [% IF myDate > date.format %]
    future
    [% ELSE %]
    today
    [% END %]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-24 07:55:08

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

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

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

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

代码语言:javascript
复制
[% IF myDate < date.now %]

如果它确实是一个字符串,请尝试:

代码语言:javascript
复制
[% IF myDate < date.format('%Y-%m-%d') %]

希望这能有所帮助。

更新

我指的是perl对象,而不是数据库中的字段是datetime还是DateTime。通常,数据库日期或日期时间由对象关系管理(DBIC或其他)“膨胀”到perl DateTime对象。你还没有告诉我们足够多的关于myDate起源的信息。我建议您在模板中显示myDatedate.now,以便进一步调试,即:

代码语言:javascript
复制
[%- "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/>"; -%]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16725585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档