Даты сравнения жидкостей

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

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

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

Я хочу решить это в шаблоне, а не в модели или контроллере.


person zoom23    schedule 10.04.2013    source источник


Ответы (4)


Назначьте свою дату переменной »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>
person shredding    schedule 10.04.2013
comment
закрывающий '‹/f:if›' нельзя ни увидеть, ни скопировать, даже если он есть. - person Kurt Ludikovsky; 08.04.2016
comment
нужно было немного пробела - person Urs; 12.07.2016

Вот мое текущее решение, которое добавляет текущую дату и выполняет некоторые вычисления с датой из содержимого.

В контроллере добавляем к данным текущую дату:

$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 для сравнения дат, так как мы не хотим сравнивать текущее время — только дату.

person Urs    schedule 12.07.2016

Преобразуйте дату в временную метку 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>
person Merec    schedule 10.04.2013
comment
В зависимости от того, что передается, это может дать вам больше, чем даты, поскольку метки времени также будут содержать минуты. - person Urs; 26.02.2015
comment
... так что, если вам нужно знать, если вы просто на следующий день, Y-m-d более адекватен - person Urs; 12.07.2016

На самом деле: потому что у 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.

person Claus Due    schedule 03.09.2016