所以我有两个约会
date_start = Date("2014", "11", "1")
date_stop = Date("2014", "12", "25")
如果我想在这两个日期之间有一组Date
个对象,那么最有效的方法是什么?
答案 0 :(得分:2)
日期之间的1.day
间隔:
(date1..date2).to_a
对于其他时间间隔,您必须自己填充数组。
interval = 2.days
[date1].tap do |arr|
until (arr.last >= date2)
new_date = arr.last + interval
# case 1: if you want the array to end on date2:
arr << [new_date, date2].min
# case 2: if you want the array to be equally spaced:
arr << new_date
# case 3: if you want the array to be equally spaced,
# but values to be within date1 and date2:
if (new_date <= date2)
arr << new_date
else
break
end
end
end
通常,您可以在范围上使用step
方法来指定间隔;但不是在这种情况下。例如,以下内容无法按预期工作:
(date1..date2).step(2.days).to_a # outputs: [date1]
答案 1 :(得分:1)
正如@Humza所说,您应该使用Ranges来解决您的问题。你能够:
..
或...
.step(YOUR_STEP)
有一个例子:
require 'date'
date_start = Date.new(2014, 11, 1)
date_stop = Date.new(2014, 11, 6)
including_last_date = (date_start..date_stop).step(5).to_a
excluding_last_date = (date_start...date_stop).step(5).to_a
puts "INCLUDING : #{including_last_date.map(&:to_s)}" # INCLUDING : ["2014-11-01", "2014-11-06"]
puts "EXCLUDING : #{excluding_last_date.map(&:to_s)}" # EXCLUDING : ["2014-11-01"]
我希望这有帮助!