2 つの日付を比較したい。データベースの日付が 2 日後の日付よりも古いかどうかを確認する条件を作成したいと考えています。
ここに私の2つの変数があります:
{<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());
これは、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'
) 内にあることに注意してください。
追伸: 現在の時刻を比較するのではなく、日付だけを比較したいので、日付の比較にはのY-m-d
形式を好みます。U
を使用して日付を UNIX タイムスタンプに変換し、format="U"
それらを比較します。比較日を含む変数を追加する必要があります。
<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>
日付をフォーマットする必要なく、2 つの日付をUNIX タイムスタンプ整数として比較します。したがって、あなたのケースでは、コントローラ アクションから を割り当て、$date = (new \DateTime('now'))->modify('+2 days');
Fluid のアクションと比較します。または、タイムスタンプを割り当ててtime()
直接比較し、DateTime の使用をスキップします。