ruby ERB сравнить даты

У меня есть сайт, который использует файлы ruby ​​(rhtml), которые я не привык редактировать (больше используется для php). У меня есть только доступ к этим файлам для редактирования (поэтому не бэкэнд).

В базе данных у меня есть дата, которую я могу отобразить, используя:

<%= zp.date %>

который будет отображаться, например, 14/10/2010

Я могу отобразить сегодняшнюю дату, используя:

<%= Date.today.strftime("%Y%m%d") %>

который будет отображать 20160122.

Я пытаюсь понять, как я могу сравнивать даты, отображать разницу и, в свою очередь, отображать что-то другое.

например

compare <%= zp.date %> and <%= Date.today.strftime("%Y%m%d") %>. 
If days difference is less than 20 echo XXX 
else 
If days difference between 20 - 40 echo XXX 
else
If days difference between 41 - 60 echo XXX 

Буду признателен за любую помощь (ссылки и т. Д.), Примеры кода будет принята с благодарностью.

Опять же, чтобы уточнить, я могу только редактировать HTML.

1 ответ

Решение

Даты прямо сопоставимы с операторами if, и вычисление разницы покажет вам количество дней между ними. Если предположить, zp.date в прошлом:

<% date_difference = Date.today - zp.date %>
<% if date_difference < 20 %>
    ...
<% elsif date_difference <= 40 %>
    ...
<% elsif date_difference <= 60 %>
    ...
<% else %>
    Difference is greater than 60
<% end %>

Обратите внимание <% %> теги, которые используются для if-логики и внутреннего кода Ruby - в основном любое выражение, которое не должно выводиться (спасибо @QPaysTaxes) вместо <%= %> который является выходным тегом.

Если вы не знаете, zp.date в прошлом или будущем, вы можете использовать abs метод на результат:

<% date_difference = (Date.today - zp.date).abs %>

И если zp.date на самом деле не Date объект, то parse Это:

<% date_difference = (Date.today - Date.parse(zp.date)).abs %>

Старые версии Ruby понадобятся strptime когда строка даты неоднозначна:

<% date_difference = (Date.today - Date.strptime(zp.date, '%d/%m/%Y')).abs %>
Другие вопросы по тегам