ruby-on-rails - 如何在 Ruby 中创建一个以当前月份开始的日期范围数组?

标签 ruby-on-rails ruby arrays ruby-on-rails-3

感谢Stefan我能够创建一个返回多个日期范围的函数:

def years
  [2013, 2012, 2011, 2010, 2009]
end

def month_ranges
  years.flat_map { |y|
    12.downto(1).map { |m| Date.new(y,m,1)..Date.new(y,m,-1) }
  }
end

# => 

[
  Mon, 01 Dec 2013..Wed, 31 Dec 2013, 
  Sat, 01 Nov 2013..Sun, 30 Nov 2013, 
  Wed, 01 Oct 2013..Fri, 31 Oct 2013, 
  Mon, 01 Sep 2013..Tue, 30 Sep 2013
]

现在,有没有办法让这个日期数组也以当年的当前月开始?在接下来的几年中,它应该始终从 12 月开始,到 1 月结束。

感谢任何能提供帮助的人。

最佳答案

简单的答案:对照当前年份检查年份。如果它们相等,则从当月开始,如果不相等,则从 12 开始。

years = [2013, 2012, 2011, 2010, 2009]

def month_ranges
  years.flat_map { |y|
    if y == Date.today.year
      start = Date.today.month
    else
      start = 12
    end
    start.downto(1).map { |m| Date.new(y,m,1)..Date.new(y,m,-1) }
  }
end

关于ruby-on-rails - 如何在 Ruby 中创建一个以当前月份开始的日期范围数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19010350/

相关文章:

javascript - 如何使用 jQuery 获取 HTML 文本而不是下拉列表中的值

c - 将结构数组传递给函数?

ruby-on-rails - rails : deploying first app - production mode

ruby - 适用于 s3 的 AWS 开发工具包 v2

ruby-on-rails - Rails 中的图像在生产中中断

javascript - 如何检查数组中的值是否已存在,如果不存在则将其插入数组

ruby-on-rails - Rails 3 生成迁移 - 没有 up 或 down 方法

ruby-on-rails - 定期延迟工作

javascript - 根据 rails 4,bootstrap 3 中的类别 id 更改下拉菜单的文本

ruby - 我可以在一个语句中拆分一个数组并将输出附加到单独的数组中吗?