Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何在数值上循环+;过去X年的月和日?_Ruby - Fatal编程技术网

Ruby 如何在数值上循环+;过去X年的月和日?

Ruby 如何在数值上循环+;过去X年的月和日?,ruby,Ruby,我需要在过去几十年中的所有日子和月份中循环使用数字,并为每个日期提供月份和日期的名称。显然,一些循环可以实现这一点,但我想知道实现这一点的最简洁的ruby方式 基本上,在过去的X年中,我每天都需要这样的输出: 2011年1月3日和2011年1月3日 最干净的方法是什么?查看是否可以构建一个范围,其中最小值和最大值是日期对象,然后调用该范围上的每个。如果日期对象支持succ方法,则该方法应能正常工作。给定开始日期和结束日期: (start_date..end_date).each do |date

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

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

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


最干净的方法是什么?

查看是否可以构建一个范围,其中最小值和最大值是日期对象,然后调用该范围上的每个
。如果日期对象支持
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