我正在编写这个代码,它按天映射日期并将它们推送到数组中:
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}]
答案 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