【问题标题】:Filling a select with a series of times in increments, plus additional options用一系列增量填充选择,以及其他选项
【发布时间】:2010-02-18 06:23:21
【问题描述】:

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

'关闭'

上午 5:00

上午 5 点 30 分

早上 6:00

...

[一直到]...

晚上 11:30

谁能想到一个更好的方法来做到这一点,或者只是“拼写”它们是最好的方式?

【问题讨论】:

    标签: ruby-on-rails ruby yaml


    【解决方案1】:

    此答案基于@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

    【讨论】:

      【解决方案2】:
      ["closed"] + Array.new(24.hours / 30.minutes) do |i|
        (Time.now.midnight + (i*30.minutes)).strftime("%I:%M %p")
      end
      

      【讨论】:

        【解决方案3】:

        您可以考虑使用 HTML5 time 输入类型,而不是 <select>

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

        由于time 输入仅在 HTML5 中可用(事实上,目前只有 Opera 支持它),您需要一种方法让其他浏览器使用它。我问过question 是否为&lt;input type='range'&gt; 元素做同样的事情。

        【讨论】:

          猜你喜欢
          • 2012-12-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-06-20
          • 1970-01-01
          相关资源
          最近更新 更多