2013-03-10 3 views
0

날짜의 빈도 (예 : 월별, 분기 별, 연간)로 분류하기 위해 배열의 연속 된 각 날짜 쌍의 날짜 차이를 월로 계산해야합니다.월간 날짜 차이

이 날짜

array_of_dates = Array.new 
array_of_strings.each do |str| 
    array_of_dates << Date.strpdate str, "%Y%m%d" 
end 

배열에 문자열의 배열을 파싱이 비의 배열을 반환

diffs = Array.new 
array.of.dates.each_cons(2) do |a,b| 
    diffs << b - a 
end 

기간의 각각의 연속 쌍의 예에 대한 기간의 차이를 계산하는 것을 포함 :

=> [(31/1), (29/1), (31/1), (30/1), (31/1)] 

그러나 개월 길이가 같지 않습니다. 몇 달 안에이 차이를 되돌릴 수있는 방법이 있습니까?

답변

2

두 날짜 사이의 개월 수를 얻을 수있는 가장 쉬운 방법은이 작업을 수행하는 것입니다 또한

months_between = finish.month - start.month + 12 * (finish.year - start.year) 

, Array.new와 배열을 생성하고 매우 관용적 루비없는 루프 그들을에서 작성합니다. 일반적으로 당신은 단지 map를 사용하여 소스 배열에서 직접 대상 배열을 만들 것입니다 :

: 당신이 뭔가 다른 날짜의 배열을 필요로하지 않는 경우

array_of_dates = array_of_strings.map { |s| Date.strptime s, "%Y%m%d" } 

diffs = array_of_dates.each_cons(2).map { 
    |a, b| b.month - a.month + 12 * (b.year - a.year) 
} 

당신은, 한 번에 모든 것을 할도 수

diffs = array_of_strings.map {|s| Date.strptime s, "%Y%m%d" }.each_cons(2).map { 
    |a, b| 
    b.month - a.month + 12 * (b.year - a.year) 
}