2012-05-24 92 views
0

c应该是2个周期的内部期间。如何以最优雅的方式获得它?如何在红宝石中获取2个日期的中期?

a1=Date.current 
a2=Date.current + 2.months 

b1=Date.current + 1.month 
b2=Date.current + 3.months 

c=??? 

c.should_be [Date.current + 1.month, Date.current + 2.months] 
+0

@Sergio你不希望看到目前的实现。你的眼睛会流血。 –

+0

我主要想知道你有多努力尝试:) –

+0

“你有什么尝试”是不适合这样的一般问题imho – pguardiario

回答

2

匆匆执行:

xs = (a1..a2).to_a & (b1..b2).to_a 
(xs.first..xs.last) 
# => Sun, 24 Jun 2012..Tue, 24 Jul 2012 

没有什么特别的日期范围。因此,搜索“范围交叉点”可以更有效地执行此操作(例如here)。现在,你可以写:

(a1..a2) & (b1..b2) 
+0

邑...交叉口是我不记得的词:) –

+0

要小心,你的日期都不是真的时间对象,或者你的范围将有两个之间的每一秒的一个元素;-) – Pavling

0
d= [a1, a2, b1, b2] 
[*1..d.length/ 2].map do |dt| 
    d.shift(2) 
end.map do |dx| 
    Date.current+ (dx[1]- dx[0]) 
end 

[孙,2012年6月24日,星期二,2012年7月24日]