RoR,无法从DateTime / TimeWithZone迭代

时间:2014-02-13 03:35:57

标签: ruby-on-rails ruby datetime seeding

我有一个简单的任务,我想要一个开始日期和一个结束日期并循环日期/日期。此代码正在我的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,我将非常感激。

4 个答案:

答案 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

这样的循环和步骤