2013-04-10 2 views
5

Я хочу сравнить две даты. Я хочу создать условие, которое проверяет, является ли дата в моей базе данных старше даты через два дня.Дата сравнения жидкости

Вот мои две переменные:

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

Преобразуйте дату в временную метку 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> 
+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 имеет метод getTimestamp (http://php.net/manual/en/datetime.gettimestamp.php, начиная с 5.3.0), который идеально соответствует поддерживаемому методу геттера в Fluid, это совершенно возможно. Учитывая $ DATE1 и $ date2 оба DateTime экземпляры, назначенные шаблону:

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

сравнит две даты как Отметка времени Unix целых без необходимости форматирования даты. Поэтому для вашего случая назначьте $date = (new \DateTime('now'))->modify('+2 days'); с вашего действия с контроллером и сравните с ним в Fluid. Или просто назначьте временную метку time() и сравните ее непосредственно с этим, пропустив использование DateTime.