ruby - find start and end of range given a point -


i created basic class right here:

class timeperiod   months_per_quarter = 3   quarter_range = {     0 => [1,3],     1 => [4,6],     2 => [7,9],     3 => [10,12]   }    def self.quarter(month_num)     (month_num - 1) / months_per_quarter   end    def self.quarter_range(month_num)     quarter = quarter month_num     t1,t2 = quarter_range[quarter]     [time.parse(date::monthnames[t1]).beginning_of_month, time.parse(date::monthnames[t2]).end_of_month]   end end  

it gives me time range quarter, given month provided integer:

> timeutils.quarter_range(time.now.month)  => [2015-04-01 00:00:00 -0400, 2015-06-30 23:59:59 -0400]  

so works. however, have cheated. had difficulty finding start , end, given, let's say, month 6. hardcoded values in quarter_range constant. want able remove quarter_range constant , find beginning , end (e.g. [4,6]) without it.

so example, if input 3 (march),6 (june),9(september),12(december) passed, know end of quarter, using modulus arithmetic:

3 % 3 => 0 6 % 3 => 0 9 % 3 => 0 12 % 3 => 0  

but tricky part given let's 5 (may), how can return [4,6]?

you can start of quarter this:

def qtr_start(mon)   mon - (mon - 1) % months_per_quarter end  qtr_start(9) # => 7 

the end of quarter plus two:

def qtr_end(mon)   qtr_start(mon) + 2 end  qtr_end(9) # => 9 

put them together:

def qtr_start_end(mon)   start = mon - (mon - 1) % months_per_quarter   [ start, start + 2 ] end  (1..12).each |mon|   start_end = qtr_start_end(mon)   puts "month #{mon} in quarter #{start_end.inspect}" end  # => month 1 in quarter [1, 3] #    month 2 in quarter [1, 3] #    month 3 in quarter [1, 3] #    month 4 in quarter [4, 6] #    month 5 in quarter [4, 6] #    month 6 in quarter [4, 6] #    month 7 in quarter [7, 9] #    month 8 in quarter [7, 9] #    month 9 in quarter [7, 9] #    month 10 in quarter [10, 12] #    month 11 in quarter [10, 12] #    month 12 in quarter [10, 12] 

Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -