Инструментарий шаблона для сравнения дат

В инструментарий шаблона я хочу добавить некоторый текст в зависимости от того, находится ли дата моего элемента в прошлом, будущем или сегодня. Я получаю поле из базы данных с именем myDate, которое представляет собой поле даты, которое выглядит так, как показано ниже. мояДата: 2012-12-12

В моем шаблоне я пытаюсь сделать что-то подобное. Но я не могу запустить шаблон, когда пытаюсь. Есть ли способ сделать это в наборе инструментов шаблона?

    [% USE date %]
    [% IF myDate < date.format %]
    past
    [% IF myDate > date.format %]
    future
    [% ELSE %]
    today
    [% END %]

person ak85    schedule 23.05.2013    source источник


Ответы (1)


Вы, наверное, сравниваете яблоки и орангутангов?

Является ли ваше значение myDate строкой или объектом DateTime? Обе стороны выражения должны быть одного типа, а DateTime выполняет большую перегрузку, чтобы вы могли сравнивать объекты DateTime, используя >, <= и т. д. Если одна сторона выражения является объектом, а другая — строкой, вы столкнетесь с проблемами.

Во-вторых, date.format без строки форматирования возвращает представление POSIX по умолчанию, которое согласно Template::Plugin::Date — это '%H:%M:%S %d-%b-%Y', почти наверняка не то, что вам нужно.

Итак, если myDate является DateTime, попробуйте:

[% IF myDate < date.now %]

и если это определенно строка, попробуйте:

[% IF myDate < date.format('%Y-%m-%d') %]

Надеюсь, это поможет.


ОБНОВЛЕНИЕ

Я имел в виду объекты perl DateTime, а не то, является ли поле в базе данных датой или датой и временем. Как правило, даты базы данных или даты и время «раздуваются» для Perl объектов DateTime с помощью ORM (DBIC или чего-то еще). Вы недостаточно рассказали нам о происхождении myDate, чтобы знать. Я предлагаю вам отобразить myDate и date.now в вашем шаблоне для дальнейшей отладки, то есть:

[%- "myDate = "; myDate; " date.now = "; date.now; "<br/>";
    myDate.strftime('I must be a DateTime object: %Y-%m-%d'); "<br/>";
    date.now.strftime('I must be a DateTime object: %Y-%m-%d'); "<br/>"; -%]
person RET    schedule 23.05.2013
comment
Спасибо за совет. это поле даты, а не поле DateTime. Я получаю что-то для вывода сейчас, но если я делаю [% IF myDate ‹ date.now %]a[% ELSE %]b[% END %] я получаю, только если это было в прошлом или настоящем? - person ak85; 24.05.2013
comment
Писал ответ - получилось слишком длинно. Смотрите мой обновленный ответ. - person RET; 24.05.2013