Ruby 如何在数值上循环+;过去X年的月和日?
我需要在过去几十年中的所有日子和月份中循环使用数字,并为每个日期提供月份和日期的名称。显然,一些循环可以实现这一点,但我想知道实现这一点的最简洁的ruby方式 基本上,在过去的X年中,我每天都需要这样的输出: 2011年1月3日和2011年1月3日Ruby 如何在数值上循环+;过去X年的月和日?,ruby,Ruby,我需要在过去几十年中的所有日子和月份中循环使用数字,并为每个日期提供月份和日期的名称。显然,一些循环可以实现这一点,但我想知道实现这一点的最简洁的ruby方式 基本上,在过去的X年中,我每天都需要这样的输出: 2011年1月3日和2011年1月3日 最干净的方法是什么?查看是否可以构建一个范围,其中最小值和最大值是日期对象,然后调用该范围上的每个。如果日期对象支持succ方法,则该方法应能正常工作。给定开始日期和结束日期: (start_date..end_date).each do |date
最干净的方法是什么?查看是否可以构建一个范围,其中最小值和最大值是日期对象,然后调用该范围上的每个
。如果日期对象支持succ
方法,则该方法应能正常工作。给定开始日期
和结束日期
:
(start_date..end_date).each do |date|
# do things with date
end
如前所述,这是可能的,因为。您可以使用以任何格式获取日期。日期可以作为一个范围,因此在一个范围内进行迭代非常容易。唯一真正的诀窍是如何将它们输出为格式化字符串,可以在Date#strftime
方法中找到,该方法有文档记录
(注意:我记得在Windows中使用未添加的百分比格式(如%-d
)时遇到了一些坏运气,但如果上述方法不起作用,并且您希望在该环境中取消添加它们,则可以删除破折号并采用您自己的解决方法。)从日期开始。步骤(到日期)
是另一种方法。
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