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

yll*_*ate 4 ruby

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

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

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

什么是最干净的方法?

bry*_*mck 18

日期可以作为范围工作,因此迭代范围相当容易.唯一真正的技巧是如何将它们作为格式化字符串输出,可以在Date#strftime方法中找到,这在此处记录.

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
Run Code Online (Sandbox Code Playgroud)

(注意:我记得有一些运气不好的方法可以使用像%-dWindows 一样的非填充百分比格式,但如果上述方法不起作用,并且你希望它们在该环境中无需填充,则可以删除短划线并使用自己的解决方法.)

  • `from_date.step(to_date)`是另一种方式. (2认同)