0

我在具有以下格式的表中有一个包含日期时间的列:

2012-10-30 08:00:00 UTC

我如何创建一个按日期收集时间的数组或哈希:

2012-10-30
  8:00
  9:00
  13:00 
2012-11-02
  8:00
  9:00

最后我希望有这样的网络输出:

October 30, 2012
  8:00   <reserve button>
  9:00   <reserve button>
  13:00  <reserve button>

November 2, 2012
  8:00   <reserve button>
  9:00   <reserve button>

如果我可以正确设置数组,我可以找出 html 部分。

4

2 回答 2

1

从表中获取所有可用的时间戳,例如:

available_times = SomeTable.select(:some_column).order(:some_column).all

按日期构建哈希:

@result = available_times.inject({}) do |m, timestamp| 
  date = timestamp.to_date
  m[date] ||= []
  m[date] << timestamp
  m
end

@result 将是一个带有可用时间的日期哈希。

您现在可以在视图中执行此操作:

<% @result.each do |date, timestamps| -%>
  <div><%= date.strftime("%B %-d, %Y") %></div>
   <% timestamps.each do |timestamp| -%> 
     <%= timestamp.strftime("%k:%M") %>  <input id='<%= timestamp.to_f%>' type='button' value='Reserve Button'/>
     <br/>
   <% end -%>
<% end -%>
于 2012-09-20T16:22:30.110 回答
1
sample = ["2012-10-28 08:30:00 UTC", 
          "2012-10-28 09:00:00 UTC", 
          "2012-11-30 09:15:00 UTC", 
          "2012-11-30 08:00:00 UTC"]

sample.each_with_object(Hash.new{ |h, k| h[k] = [] }) do |d, h|
  date = DateTime.parse(d)
  h[date.strftime("%B %-d, %Y")] << date.strftime("%k:%M")
end
# => {"October 28, 2012"=>["8:30", "9:00"], "November 30, 2012"=>["9:15", "8:00"]} 
于 2012-09-20T16:30:20.683 回答