我想比较两个日期。我想创建一个条件来检查我的数据库中的日期是否早于两天内的日期。
这是我的两个变量:
{<f:format.date format="d.m.Y">+2 days</f:format.date>}
{<f:format.date format="d.m.Y">{day.valid}</f:format.date>}
我想在模板中解决这个问题,而不是在模型或控制器中。
将您的日期分配给变量 »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>
这是我当前的解决方案,它添加了当前日期并使用内容中的日期进行了一些计算。
在控制器中,将当前日期添加到数据中:
$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
,因为我们不想比较当前时间——只是日期。
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>
实际上:因为 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 的使用。