ruby ERB比较日期

时间:2016-01-22 17:00:53

标签: ruby-on-rails ruby erb rhtml

我有一个使用ruby(rhtml)文件的网站,我不习惯编辑(更习惯于php)。我只能访问这些文件进行编辑(所以不能编辑后端)。

在数据库中,我有一个可以使用的日期:

<%= zp.date %>

将显示例如14/10/2010

我可以使用以下方式显示今天的日期:

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

将显示20160122。

我想要解决的是如何比较日期并回应差异,然后显示不同的东西。

e.g。

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 

任何帮助将不胜感激(链接等),代码示例将不胜感激。

再次澄清我只能编辑rhtml。

1 个答案:

答案 0 :(得分: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-logic和内部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 %>