2014-10-12 17 views
0

我要秀哪还有时间从上午9点到上午11点然后下午1点至下午3点通过类似以下的15分钟inteveral一个选择框:Rails的时间选择有两个范围

9:00 AM 
9:15 AM 
9:30 AM 
. 
. 
. 
10:45 AM 
11:00 AM 
01:00 PM 
01:15 PM 
01:30 PM 
. 
. 
. 
2:45 PM 
3:00 PM 

上述范围将是动态但它有两个区间。是否有可能实现这一目标?

+1

你到底在想什么? – Surya 2014-10-12 08:01:25

+0

我需要像time_select助手一样的东西,但需要一些时间不要在那里列出 – Baran 2014-10-12 11:48:30

回答

4

首先定义边界,

start_time = DateTime.parse("9 AM").to_i 
start_interval = DateTime.parse("11 AM").to_i 
end_interval = DateTime.parse("1 PM").to_i 
end_time = DateTime.parse("3 PM").to_i 

然后使用rangeselect以获得所需的值,

values = (start_time..end_time).step(15.minutes).select{|t| t <= start_interval || t >= end_interval } 

然后你就可以在这些值重复,以产生选择的选项,例如,

select_tag :dt, options_for_select(values.map{ |t| [ Time.at(t).utc.to_datetime.strftime("%H:%M %p"), Time.at(t).utc.to_datetime ] }) 

你可以在控制台上试试这个,

> (start_time..end_time).step(15.minutes).select{|t| t <= start_interval || t >= end_interval }.map{ |t| Time.at(t).utc.to_datetime.strftime("%H:%M %p") } 

=> ["09:00 AM", "09:15 AM", "09:30 AM", "09:45 AM", "10:00 AM", "10:15 AM", "10:30 AM", "10:45 AM", "11:00 AM", "13:00 PM", "13:15 PM", "13:30 PM", "13:45 PM", "14:00 PM", "14:15 PM", "14:30 PM", "14:45 PM", "15:00 PM"]