Ruby:按年和月分组日期范围

时间:2016-08-02 13:25:57

标签: ruby date

我正在我的示例范围内为每个月创建一个范围。

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)}

有没有人知道这样做的更漂亮(或至少是工作)方式?

2 个答案:

答案 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}

您可以根据需要调整。