2012-05-24 2 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

. 너의 눈은 피를 흘릴 것이다. –

+0

나는 당신이 얼마나 열심히 노력했는지 알고 싶다. –

+0

"무엇을 먹으려고 했는가?"와 같은 일반적인 질문에 적합하지 않다. – 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

yap ... 교차로는 내가 기억할 수없는 단어입니다. –

+0

어느 날짜도 실제로 Time 개체가 아니거나 범위가 두 요소 사이의 모든 초마다 하나의 요소를 갖게되므로주의하십시오. – 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일] 당신이 현재 구현을보고 싶지 않아 @Sergio

관련 문제