如何在过去的X年中以数字方式循环+月和日?

时间:2012-02-12 05:20:00

标签: ruby

我需要在过去的几十年中以数字方式遍历所有日期和月份以及每个日期的月份和日期的名称。很明显,一系列循环可以实现这一点,但我想知道最简洁的类似红宝石的方法来实现这一点。

基本上,过去X年我每天都需要这样的输出:

  

2011年1月3日和2011年1月3日

什么是最干净的方法?

3 个答案:

答案 0 :(得分:18)

日期可以作为范围使用,因此迭代范围相当容易。唯一真正的诀窍是如何将它们作为格式化字符串输出,可以在Date#strftime方法中找到,该方法记录为here

from_date = Date.new(2011, 1, 1)
to_date   = Date.new(2011, 1, 10)

(from_date..to_date).each { |d| puts d.strftime("%-d %B %Y and %-m/%-d/%Y") }

# => 1 January 2011 and 1/1/2011
# => 2 January 2011 and 1/2/2011
# => ...
# => 9 January 2011 and 1/9/2011
# => 10 January 2011 and 1/10/2011

注意:我记得在Windows中使用未填充的百分比格式(例如%-d)有一些运气不好,但是如果上述方法不起作用并且您希望它们未填充环境,您可以删除短划线并使用自己的解决方法。)

答案 1 :(得分:4)

鉴于start_date& end_date

(start_date..end_date).each do |date|
  # do things with date
end

正如David所说,这可能是因为Date#succ。您可以使用Date#strftime以您想要的任何格式获取日期。

答案 2 :(得分:2)

看看你是否可以构造一个范围,其中min和max是Date对象,然后在范围上调用.each。如果Date对象支持succ方法,则该方法应该有效。