2010-02-18 68 views
5

使用Ruby on Rails,我使用給定的增量填充'select',例如每30分鐘一次。 目前我正在寫出YAML文件中的所有可能性,但我覺得這有一種更爲輕鬆的方式。我想我想提供一個start_time,一個end_time,一個增量,並且目前只有一個叫做'Closed'的選項(想'business_hours')。 所以,我的選擇可能會顯示:用一系列增量填充選擇項,加上附加選項

'封閉'

上午5:00

上午5:30

上午6:00

...

[一路到] ...

下午11:30

誰能想到這樣做的更好的辦法,或者僅僅是「拼寫」他們都出去,最好的方法是什麼?

回答

13

此答案是根據@emh的答案。

def create_hours(parameters) 
    start_time = parameters[:start_time] ? parameters[:start_time] : 0 
    end_time = parameters[:end_time] ? parameters[:end_time] : 24.hours 
    increment = parameters[:increment] ? parameters[:increment] : 30.minutes 
    Array.new(1 + (end_time - start_time)/increment) do |i| 
    (Time.now.midnight + (i*increment) + start_time).strftime("%I:%M %p") 
    end 
end 

你可以用這種方式:

create_hours(:start_time => 5.hours, :end_time => 23.hours) 
=> ["05:30 AM", "06:00 AM", "06:30 AM", "07:00 AM", "07:30 AM", "08:00 AM", 
    "08:30 AM", "09:00 AM", "09:30 AM", "10:00 AM", "10:30 AM", "11:00 AM", 
    "11:30 AM", "12:00 PM", "12:30 PM", "01:00 PM", "01:30 PM", "02:00 PM", 
    "02:30 PM", "03:00 PM", "03:30 PM", "04:00 PM", "04:30 PM", "05:00 PM", 
    "05:30 PM", "06:00 PM", "06:30 PM", "07:00 PM", "07:30 PM", "08:00 PM", 
    "08:30 PM", "09:00 PM", "09:30 PM", "10:00 PM", "10:30 PM", "11:00 PM"] 

要添加 「關閉」 使用:

["closed"] + create_hours(:start_time => 5.hours, :end_time => 23.hours) 

您也可以通過:increment => 15.minutes - 默認情況下它被設置爲30.minutes

8
["closed"] + Array.new(24.hours/30.minutes) do |i| 
    (Time.now.midnight + (i*30.minutes)).strftime("%I:%M %p") 
end 
0

取而代之的是<select>你可以考慮使用HTML5 time輸入類型:

<input type='time' min='05:30' max='23:30' step='00:30' /> 

由於time輸入僅在HTML5(事實上,只有Opera支持它爲止),那麼您會想其他瀏覽器可以使用它。我問了一個question關於爲<input type='range'>元素做同樣的事情。