отображать 15-минутные шаги между двумя заданными временами - PullRequest
1 голос
/ 22 июля 2011

У меня есть таблица встреч, которая сохраняется 2 раза. начало и конец. Я хочу отобразить все встречи с 15-минутными шагами. например учитывая 10 утра / 11 утра, теперь покажи мне 10,15, 10,30, 10,45 на мой взгляд! Спасибо за совет!

-@appointment.each do |form|  
  =form.date  
  =form.start_time  
  =form.end_time

Ответы [ 2 ]

14 голосов
/ 22 июля 2011

У меня есть одна строка, но вы действительно этого хотите? И, надеюсь, дельта между этими двумя датами не слишком велика, код ниже не очень эффективен.

(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] 
9 голосов
/ 22 июля 2011

вам просто нужно передать параметр : minute_step => 15 в поля ввода

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...