У меня есть одна строка, но вы действительно этого хотите? И, надеюсь, дельта между этими двумя датами не слишком велика, код ниже не очень эффективен.
(Time.now.to_i..1.hour.from_now.to_i).to_a.in_groups_of(15.minutes).collect(&:first).collect { |t| Time.at(t) }
Лучшее решение:
# Your variables
time_start = Time.now
time_end = time_start + 1.hour
[time_start].tap { |array| array << array.last + 15.minutes while array.last < time_end }
Я добавил to
в методы экземпляра Ruby Time
:
class Time
def to(to, step = 15.minutes)
[self].tap { |array| array << array.last + step while array.last < to }
end
end
так что вы получите такой код:
time_start.to(time_end)
Все три решения будут заканчиваться массивом, содержащим Time
объектов шагов.
=> [2011-07-22 17:11:11 +0200, 2011-07-22 17:26:11 +0200, 2011-07-22 17:41:11 +0200, 2011-07-22 17:56:11 +0200, 2011-07-22 18:11:11 +0200]