2013-04-10 10 views
5

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>} 

私はテンプレートではなく、モデルやコントローラでこれを解決したいです。

答えて

9
<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 now + 2 days. 
</f:else> 
</f:if> 
+0

閉じる ''はそこにあっても見ることもコピーすることもできません。 –

+0

空白が必要 – Urs

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> 
+0

渡される内容によっては、タイムスタンプにも分が含まれるため、これは日付以上のものを提供します。 – Urs

+0

...そうすれば、次の日にちょうどいいかどうかを知る必要がある場合は、Y-m-dがより適切です。 – Urs

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までのフォーマットが好んでいます。私たちは現在の時刻 - ちょうど日付を比較したくないからです。

0

実際には、DateTimeにFluidでサポートされているgetterメソッドに完全に準拠するgetTimestampメソッド(http://php.net/manual/en/datetime.gettimestamp.php、5.3.0以降)があるので、次のことは完全に可能です。 $の日付1と$ date2のを考えると、テンプレートに割り当てられ、両方のDateTimeインスタンスです:

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

は、日付をフォーマットすることなくUnixタイムスタンプ整数ように2つの日付を比較します。したがって、あなたのケースでは、コントローラーアクションから$date = (new \DateTime('now'))->modify('+2 days');を割り当てて、それをFluidのアクションと比較してください。または、time()タイムスタンプを割り当て、それを直接比較して、DateTimeの使用をスキップしてください。