2013-04-10 13 views
5

Chcę porównać dwie daty. Chcę wprowadzić warunek, który sprawdzi, czy data w mojej bazie danych jest starsza niż data z dwóch dni.Płyn porównuje daty

Oto moje dwie zmienne:

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

chcę rozwiązać to w szablonie, a nie w modelu lub kontroler.

Odpowiedz

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

"nie można zobaczyć ani skopiować" zamknięcia ", nawet jeśli jest tam. –

+0

potrzebował jakichś białych znaków – Urs

1

Konwertuj datę na uniksowy znacznik czasu, używając format="U" i porównaj je. Musisz dodać zmienną, która zawiera datę porównania.

<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

W zależności od tego, co zostanie przekazane, może to dać więcej niż daty, ponieważ znaczniki czasu będą również zawierać minuty. – Urs

+0

... więc jeśli chcesz wiedzieć, czy jesteś w najbliższy DZIEŃ, Y-m-d jest bardziej odpowiedni, – Urs

1

Oto moje obecne rozwiązanie, które dodaje się w bieżącej daty i robi niektóre obliczenia z datą z treści.

w sterowniku, dodać aktualną datę z danymi:

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

ta jest dostępna jako {date_now} w płynie następnie:

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

zauważyć, jak po prawej stronie, tam, gdzie niektóre obliczenia są wykonywane, pojawiają się dodatkowe cytaty i nawiasy klamrowe ('{event.date}-4 weeks').

PS Preferuję format Y-m-d do U dla porównania dat, ponieważ nie chcemy porównywać bieżącego czasu - tylko daty.

0

Właściwie: ponieważ DateTime ma metodę getTimestamp (http://php.net/manual/en/datetime.gettimestamp.php, od wersji 5.3.0), która doskonale pasuje do obsługiwanej nazwy metody pozyskiwania w Fluid, następujące możliwości są całkowicie możliwe. Biorąc $ i $ date2 date1 są zarówno przypadki DateTime przypisane do szablonu:

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

porówna dwie daty jak uniksowy znacznik czasu całkowitymi bez konieczności formatowania daty. Tak więc dla twojego przypadku przypisz $date = (new \DateTime('now'))->modify('+2 days'); ze swojej akcji kontrolera i porównaj z tym w Fluid. Lub po prostu przypisz znacznik czasu time() i porównaj bezpośrednio do niego, pomijając użycie DateTime.

Powiązane problemy