检查日期数组是否与订购的月份相邻

时间:2014-03-22 22:01:03

标签: ruby date

我有一系列日期。我需要检查它是否遵循一个月的顺序,例如:

[Mar 2010, Apr 2010, May 2010, Jun 2010, ..., Jan 2012]

由于Date对象应该有日,月和年,我想忽略这一天,只担心月份和年份。

如果序列中没有“缺失”月份,我想获得true。换句话说,四月之后或矢量结束,或者我有五月;在5月之后,矢量结束或者存在6月。

如果月份没有正确订购(从较旧到较新)或者有几个月缺失,我想获得false

我可以使用“<”轻松检查日期是否已订购运营商。但我不知道如何检查是否有错过的月份。我怎么能这样做?

2 个答案:

答案 0 :(得分:4)

这是一种方式

require 'date'
>> dates 
=> ["Nov 2010", "Dec 2010", "Jan 2011"]

>> date_objs = dates.map{|d| Date.parse d }
=> [#<Date: 2010-03-01 ((2455257j,0s,0n),+0s,2299161j)...]

>> date_objs.each_cons(2).all?{|d1, d2| d1.next_month == d2 }
=> true

这也处理了缺失的月份:

>> dates = ["Nov 2010", "Dec 2010", "Feb 2011"]
>> date_objs = dates.map{|d| Date.parse(d) }
>> date_objs.each_cons(2).all?{|d1, d2| d1.next_month == d2 }
=> false

答案 1 :(得分:1)

require 'date'
ar =["Mar 2010","Apr 2010", "May 2010", "Jun 2010"]
p ar.map{|d| Date.parse(d)}.each_cons(2).all?{|(d1,d2)| (d1 >> 1) == d2} #=> true