如何按周将日期推送到数组中?

时间:2015-10-12 02:53:08

标签: ruby-on-rails ruby

我正在编写这个代码,它按天映射日期并将它们推送到数组中:

rtn_ary = []
(2.weeks.ago.to_date..Date.today).map do |date|
  rtn_ary << {period: date}
end

如果我的预期结果是基于几周而不是这样的天数,我如何编写代码?

[[{:period=>Mon, 28 Sep 2015}, {:period=>Tue, 05 Oct 2015}, {:period=>Tue, 12 Oct 2015}]

2 个答案:

答案 0 :(得分:2)

一个简单的解决方案可能是迭代7天而不是1天:

rtn_ary = (2.weeks.ago.to_date..Date.today).step(7).map do |date|
  {period: date}
end
=> [{:period=>Mon, 28 Sep 2015}, {:period=>Mon, 05 Oct 2015}] 

有关步骤的更多信息:http://ruby-doc.org/core-1.9.3/Range.html#method-i-step

答案 1 :(得分:1)

为了得到你想要的东西,你需要一个额外的步骤:

(2.weeks.ago.to_date..Date.today).map do |date|
     rtn_ary << {period: date.to_formatted_s(:long)}
 end

to_formatted_s()方法将日期转换为格式化字符串,并采用一个参数来定义如何将日期格式化为字符串。

date.to_formatted_s(:short)         # => "10 Nov"
date.to_formatted_s(:number)        # => "20071110"
date.to_formatted_s(:long)          # => "November 10, 2007"
date.to_formatted_s(:long_ordinal)  # => "November 10th, 2007"
date.to_formatted_s(:rfc822)        # => "10 Nov 2007"
date.to_formatted_s(:iso8601)       # => "2007-11-10"

查看导轨Documentation