I am trying to created a list of year-week (equivalent to mySQL's YEARWEEK(date,1)) falling between two date values in Rails. List is generating perfectly if start-date and end-date are falling in same year. Here is my code:
  campaign_start_date = "2013-08-02 06:59:00"
  campaing_end_date = "2013-09-01 06:59:00"
  start_year = DateTime.parse(campaign_start_date).cwyear
  start_week = "%04d%02d" % [start_year, DateTime.parse(campaign_start_date).cweek]
  end_year = DateTime.parse(campaing_end_date).cwyear
  end_week = "%04d%02d" % [end_year, DateTime.parse(campaing_end_date).cweek]
  if start_year == end_year
    (start_week..end_week).each{ |i| result << i }
  else
    # need to build a suitable logic here. to handle the case when duration spans over multiple years. for example started in 01-Nov-14 and ended in 01-May-15
  end
  return result
there will be no problem with above date values, it will fall to if case and the result I will get is:
[
  "201331",
  "201332",
  "201332",
  "201333",
  "201334",
  "201335"
]
which is also what I exactly want. BUT if my start-date and end-date values are these for example:
  campaign_start_date = "2014-07-23 06:59:00"
  campaing_end_date = "2015-03-01 06:59:00"
means falling in different years, then it need different logic that the one I have in if condition because for these date values (start_week=201430 and end_week=201509) the if condition is not suitable here because it would generate 80 values, which is wrong because number of weeks between these dates are not 80. Need help to develop the logic for else case. May be its easy but right now I am just tired to dig it any deeper. 
Special attention: the solutions should care about commercial year and commercial week (refer .cwyear and .cweek functions of rails) For example yearweek of 2016-01-01 would be 201553 not 201601
any help in this regard would be much appreciated.