流体比较日期

10

我想比较两个日期。我想创建一个条件来检查我的数据库中的日期是否早于两天前的日期。

这是我的两个变量:

{<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个回答

15

将您的日期分配给变量“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>

无法看到或复制结束标签'</f:if>',即使它存在。 - Kurt Ludikovsky
1
需要一些空格。 - Urs

2

以下是我的当前解决方案,它添加了当前日期并对来自内容的日期进行一些计算。

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

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

然后在fluid中使用{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进行日期比较,因为我们不想比较当前时间 - 只比较日期。

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>

根据传入的参数,这可能会给你更多的内容,因为时间戳将包含分钟。 - Urs
如果您需要知道是否仅在下一天,那么Y-m-d更为适合。 - Urs

0
实际上,由于DateTime类有一个getTimestamp方法(http://php.net/manual/en/datetime.gettimestamp.php,自5.3.0版本起),该方法完全符合Fluid支持的getter方法命名规范,因此以下操作是完全可行的。假设$template中分别赋值了$date1和$date2两个DateTime实例:
<f:if condition="{date1.timestamp} < {date2.timestamp}">...</f:if>

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接