Подтвердить что ты не робот

RoR, Невозможно выполнить итерацию с DateTime/TimeWithZone

У меня есть простая задача, когда я хочу взять дату начала и дату окончания и цикл за дни/даты. Этот код используется в моей задаче 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, я был бы очень благодарен.

4b9b3361

Ответ 1

start = someModel.start_date.to_datetime
finish = someModel.end_date.to_datetime
while(start < finish) do
  #bunch of awesome stuff
  start += 1.day
end

Ответ 2

Вы не можете перебирать из DateTime. Но вы можете выполнять итерацию, когда начинаются и заканчиваются интервал являются экземплярами Date. Преобразуйте их, если это возможно.

И затем посмотрите на эти методы Date:

для использования вместо each

Ответ 3

Вы должны убедиться, что имеете дело с объектом 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

Ответ 4

Если вы хотите итерации по диапазону, вы можете рассмотреть цикл и шаг каждый день, используя что-то вроде someModel.start_date + 1.day.to_i