流体比较日期

时间:2013-04-10 14:49:16

标签: typo3 fluid

我想比较两个日期。我想提出一个条件,检查我的数据库中的日期是否早于两天中的日期。

以下是我的两个变量:

{<f:format.date format="d.m.Y">+2 days</f:format.date>}
{<f:format.date format="d.m.Y">{day.valid}</f:format.date>}

我想在模板中解决这个问题,而不是在模型或控制器中解决这个问题。

4 个答案:

答案 0 :(得分:11)

将您的日期分配给变量»yourdate«。

<f:if condition="{f:format.date(date: '+2 days', format: 'Y-m-d')} < {f:format.date(date: yourdate, format: 'Y-m-d')}">
    <f:then>
       yourdate is smaller than now + 2 days.
    </f:then>
    <f:else>
        yourdate is greater than or equal to now + 2 days.
    </f:else>
</f:if>

答案 1 :(得分:1)

使用format="U"将日期转换为unix时间戳并进行比较。您需要添加一个包含比较日期的变量。

<f:if condition="{f:format.date(date: day.valid, format: 'U')} > {f:format.date(date: date_compare, format: 'U')}">
    Date is valid
</f:if>

答案 2 :(得分:1)

这是我当前的解决方案,它在当前日期中添加并使用内容中的日期进行一些计算。

在控制器中,将当前日期添加到数据中:

$this->view->assign('date_now', new \DateTime());

这可以作为{date_now}在流体中使用:

<f:if condition="{f:format.date(date: date_now, format: '(Y-m-d)')} > {f:format.date(date: '{event.date}-4 weeks', format: '(Y-m-d)')}">
   <f:then>
      <p>Event date is past</p>
   </f:then>
   <f:else>
      <p>Event date is upcoming</p>
   </f:else>
</f:if> 

注意在右侧,如果进行了一些计算,会有其他引号和大括号('{event.date}-4 weeks')。

PS我更喜欢Y-m-d格式到U进行日期比较,因为我们不想比较当前时间 - 只是日期。

答案 3 :(得分:0)

实际上:因为DateTime有一个getTimestamp方法(http://php.net/manual/en/datetime.gettimestamp.php,自5.3.0开始),它完全符合Fluid中支持的getter方法命名,所以完全可以实现。给定$ date1和$ date2都是分配给模板的DateTime实例:

<f:if condition="{date1.timestamp} < {date2.timestamp}">...</f:if>

将两个日期比较为 unix时间戳整数,而无需格式化日期。因此,对于您的情况,从控制器操作中分配$date = (new \DateTime('now'))->modify('+2 days');并与Fluid中的操作进行比较。或者只是分配time()时间戳并直接与之比较,跳过DateTime用法。