Rails比较日期

Rails比较日期

问题描述:

在我的Rails应用程序中,我得到一些日期字符串,如'2016-6','2016-10',我想找到最新的一个,怎么做?Rails比较日期

+0

很奇怪的日期格式) – Aleksey

分析特定的日期格式使用Date.strptime

str = '2016-6' 
Date.strptime(str, '%Y-%m') 
=> Wed, 01 Jun 2016 

然后,你可以简单地比较日期:

Date.strptime('2016-6', '%Y-%m') < Date.strptime('2016-10', '%Y-%m') 
=> true 

,并找到一个字符串,它代表的最后日期:

['2016-6', '2016-10'].max_by { |str| Date.strptime(str, '%Y-%m') } 
=> "2016-10" 
+0

这完全是我想要的!谢谢。 – neo

假设你从你那里得到你的日期可能想要使用这样的东西格式化日期:

<%= f.date_select :startdate,{ discard_day: false, discard_month: true, discard_year: true }, { :class => 'form-control' } %> 

提供的日期格式不足以进行分析。

只要格式符合某些规则,Ruby就可以解析字符串日期。

使用连字符-时,包含一天是强制性的。

这是因为通常使用连字符的日期格式包括当天。

幸运的是,如果你愿意或能够改变你可以做以下格式:

date = '2016/6' 
DateTime.parse(date) 
=> Wed, 01 Jun 2016 00:00:00 +0000 

否则我只想追加第一个日期。

date = '2016-6' + '-1' 
DateTime.parse(date) 
=> Wed, 01 Jun 2016 00:00:00 +0000 

现在你可以做典型比较的东西:

date1 = ... 
date2 = ... 
case date1 <=> date2 
when -1 
    # date1 is before date2 
when 1 
    # date1 is after date2 
when 0 
    # date1 is equal to date2