Ответ 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
У меня есть простая задача, когда я хочу взять дату начала и дату окончания и цикл за дни/даты. Этот код используется в моей задаче 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, я был бы очень благодарен.
start = someModel.start_date.to_datetime
finish = someModel.end_date.to_datetime
while(start < finish) do
#bunch of awesome stuff
start += 1.day
end
Вы не можете перебирать из DateTime
. Но вы можете выполнять итерацию, когда начинаются и заканчиваются
интервал являются экземплярами Date
. Преобразуйте их, если это возможно.
И затем посмотрите на эти методы Date
:
для использования вместо each
Вы должны убедиться, что имеете дело с объектом 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
Если вы хотите итерации по диапазону, вы можете рассмотреть цикл и шаг каждый день, используя что-то вроде someModel.start_date + 1.day.to_i