我有一个简单的任务,我想要一个开始日期和一个结束日期并循环日期/日期。此代码正在我的db:seed rake任务中使用。目前,我的代码经历了以下尝试。
(someModel.start_date.to_datetime..someModel.end_date.to_datetime).each {
|x| puts x
}
......
(someModel.start_date...someModel.end_date).each { |x| puts x }
在每种情况下,我都会收到这样的错误。
can't iterate from ActiveSupport::TimeWithZone
or
can't iterate from DateTime
如果有人知道如何迭代一系列DateTimes,我将非常感激。
答案 0 :(得分:23)
start = someModel.start_date.to_datetime
finish = someModel.end_date.to_datetime
while(start < finish) do
#bunch of awesome stuff
start += 1.day
end
答案 1 :(得分:7)
您必须确保正在处理Date
对象(通过调用to_date
),然后一切都按预期工作:
start_date.to_date.upto(end_date.to_date) {|date| puts date }
或使用范围:
(start_date.to_date..end_date.to_date).to_a
答案 2 :(得分:3)
您无法从DateTime
进行迭代。但是你可以在开始和结束时进行迭代
interval是Date
的实例。如果可能的话,转换它们。
然后查看这些Date
方法:
代替each
答案 3 :(得分:0)
如果你想迭代这个范围,你可以考虑使用像someModel.start_date + 1.day.to_i