2013-04-10 17 views
5

Ich möchte zwei Daten vergleichen. Ich möchte eine Bedingung stellen, die überprüft, ob das Datum in meiner Datenbank älter als das Datum in zwei Tagen ist.Fluid vergleichen Daten

Hier sind meine zwei Variablen:

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

ich dies in der Vorlage lösen will, nicht im Modell oder die Steuerung.

Antwort

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

das Schließen '' kann nicht gesehen noch kopiert werden, sogar es ist da. –

+0

brauchte es einige Leerzeichen – Urs

1

Konvertieren Sie das Datum in einen Unix-Zeitstempel mit format="U" und vergleichen Sie sie. Sie müssen eine Variable hinzufügen, die das Vergleichsdatum enthält.

<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

Je nachdem, was übertragen wird, kann dies mehr als Daten geben, da die Zeitstempel auch Minuten enthalten. – Urs

+0

... also, wenn Sie wissen müssen, ob Sie gerade am nächsten Tag sind, ist Y-m-d angemessener – Urs

1

Hier ist meine aktuelle Lösung, die in einem aktuellen Datum erstellt und führt einige Berechnungen mit dem Datum aus dem Inhalt.

In der Steuerung, um das aktuelle Datum der Daten hinzufügen:

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

Dies als {date_now} verfügbar ist in Flüssigkeit dann:

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

Hinweis, wie auf der rechten Seite, Wo etwas berechnet wird, kommen zusätzliche Anführungszeichen und geschweifte Klammern hinzu ('{event.date}-4 weeks').

PS Ich bevorzuge das Y-m-d Format zu U für einen Datumsvergleich, da wir nicht die aktuelle Zeit vergleichen möchten - nur das Datum.

0

Eigentlich: Da DateTime eine getTimestamp Methode (http://php.net/manual/en/datetime.gettimestamp.php, seit 5.3.0) hat, die perfekt mit der unterstützten Getter-Methode in Fluid Namen übereinstimmt, ist folgendes perfekt möglich. Gegeben $ date1 und $ date2 sind beide Instanzen Datetime der Vorlage zugewiesen:

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

Werden die beiden Daten als Unix-Zeitstempel ganzen Zahlen ohne die Notwendigkeit, vergleichen, um die Daten zu formatieren. Weisen Sie also in Ihrem Fall eine $date = (new \DateTime('now'))->modify('+2 days'); aus Ihrer Controller-Aktion zu und vergleichen Sie diese in Fluid. Oder weisen Sie einfach den time() Zeitstempel zu und vergleichen Sie direkt mit diesem, indem Sie die DateTime-Verwendung überspringen.