如何在过去的X年中以数字+月和日进行循环

  • 本文关键字:循环 数字 过去 ruby
  • 更新时间 :
  • 英文 :


我需要用数字循环过去几十年的所有日期和月份,并为每个日期提供月份和日期的名称。显然,几个系列的循环可以实现这一点,但我想知道实现这一目标的最简洁的ruby方式。

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

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

最干净的方法是什么?

日期可以作为一个范围工作,因此在一个范围内迭代相当容易。唯一真正的技巧是如何将它们输出为格式化的字符串,这可以在这里介绍的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

注意:我记得以前在Windows中使用未添加的百分比格式(如%-d)时运气不好,但如果以上内容不起作用,并且您希望它们在该环境中未添加,则可以删除破折号并使用自己的解决方案。)

给定start_date&end_date:

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

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

查看是否可以构造一个Range,其中min和max是Date对象,然后在该范围上调用.each。如果Date对象支持succ方法,那么它应该可以工作。

最新更新