我正在我的示例范围内为每个月创建一个范围。
example_range = (Time.zone.today..2.years.from_now)
输出应该如下:
=> [Wed, 03 Aug 2016..Wed, 31 Aug 2016, Thu, 01 Sep 2016..Fri,
30 Sep 2016, Sat, 01 Oct 2016..Mon, 03 Oct 2016, ...]
目前我正在这样做,这对于超过一年的范围不起作用,因为分组将把16年1月和17年1月分成一组。
example_range.group_by(&:month).each { |_, month| month.first..month.last }
我也试过这个,但ruby因为某些原因而错误地对此进行了分析......
example_range.group_by(&:year).map{ |ary| ary.group_by(&:month)}
有没有人知道这样做的更漂亮(或至少是工作)方式?
答案 0 :(得分:4)
这是怎么回事:
example_range.group_by {|date| [date.year, date.month] }.map {|_, month| month.first..month.last }
如果您使用的是Active Support(Rails),这也可以使用:
example_range.group_by(&:beginning_of_month).map {|_, month| month.first..month.last }
答案 1 :(得分:0)
我认为最好的解决方案是:
example_range.group_by {|date| date.month.to_s + "-" + date.year.to_s}
您可以根据需要调整。