我有一系列日期。我需要检查它是否遵循一个月的顺序,例如:
[Mar 2010, Apr 2010, May 2010, Jun 2010, ..., Jan 2012]
由于Date对象应该有日,月和年,我想忽略这一天,只担心月份和年份。
如果序列中没有“缺失”月份,我想获得true
。换句话说,四月之后或矢量结束,或者我有五月;在5月之后,矢量结束或者存在6月。
如果月份没有正确订购(从较旧到较新)或者有几个月缺失,我想获得false
。
我可以使用“<”轻松检查日期是否已订购运营商。但我不知道如何检查是否有错过的月份。我怎么能这样做?
答案 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