我正在示例范围内为每个月创建一个范围。
example_range = (Time.zone.today..2.years.from_now)
Run Code Online (Sandbox Code Playgroud)
输出应如下所示:
=> [Wed, 03 Aug 2016..Wed, 31 Aug 2016, Thu, 01 Sep 2016..Fri,
30 Sep 2016, Sat, 01 Oct 2016..Mon, 03 Oct 2016, ...]
Run Code Online (Sandbox Code Playgroud)
目前,我正在执行此操作,该操作不能使用超过一年的时间,因为该分组会将16年1月和17年1月归为一组。
example_range.group_by(&:month).each { |_, month| month.first..month.last }
Run Code Online (Sandbox Code Playgroud)
我也尝试过这个,但是由于某种原因,Ruby segfaults在这个问题上...
example_range.group_by(&:year).map{ |ary| ary.group_by(&:month)}
Run Code Online (Sandbox Code Playgroud)
有谁知道一种更漂亮(或至少可以工作)的方式?
小智 5
这怎么样:
example_range.group_by {|date| [date.year, date.month] }.map {|_, month| month.first..month.last }
Run Code Online (Sandbox Code Playgroud)
如果您使用的是Active Support(Rails),这也将起作用:
example_range.group_by(&:beginning_of_month).map {|_, month| month.first..month.last }
Run Code Online (Sandbox Code Playgroud)