使用一系列时间以增量填充选择,以及其他选项

99m*_*les 5 ruby yaml ruby-on-rails

使用Ruby on Rails,我使用给定的增量(例如每30分钟)填充一次'select'.目前我正在写出YAML文件中的所有可能性,但我觉得有一种更流畅的方式.我想我想提供一个start_time,一个end_time,一个增量,当前只有一个名为'Closed'的选项(想想'business_hours').所以,我的选择可能会显示:

'关闭'

5:00 AM

上午5:30

上午6:00

...

[一直到] ......

下午11:30

任何人都可以想到一个更好的方法,或者只是以最好的方式"拼写"它们吗?

kle*_*lew 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
Run Code Online (Sandbox Code Playgroud)

你可以这样使用它:

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"]
Run Code Online (Sandbox Code Playgroud)

添加"已关闭"使用:

["closed"] + create_hours(:start_time => 5.hours, :end_time => 23.hours)
Run Code Online (Sandbox Code Playgroud)

您也可以传递:increment => 15.minutes- 默认设置为30.minutes.


emh*_*emh 8

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