我如何将我的start_at
列分解为三个不同的字段,分钟数,分钟数和秒数而不是一个?
注意:我想将其保留为一列而不是三列不同。
这是我的代码:
表:
class CreateTimers < ActiveRecord::Migration
def change
create_table :timers do |t|
t.time :start_at
t.timestamps
end
end
end
形式:
<%= form_for(@timer) do |f| %>
<div class="form-inputs">
<%= f.text_field :start_at %>
</div>
<div class="form-actions">
<%= f.submit 'Start', :class => 'btn-primary span3' %>
</div>
<% end %>
答案 0 :(得分:2)
如果您只想将时间分成三个单独的输入,可以使用time_select
帮助器。
否则使用strftime
方法;请查看http://strfti.me以获取更多帮助。
答案 1 :(得分:2)
你没有说出你的时间价值是什么格式。因为用户喜欢与众不同,如果你给他们一个自由形式的文本字段,你可能会获得不同格式的数据,所以你'我必须要灵活。
您可以尝试使用DateTime的parse
方法,该方法为格式提供了一些灵活性。
DateTime.parse('2001-02-03T04:05:06+07:00')
#=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
DateTime.parse('20010203T040506+0700')
#=> #<DateTime: 2001-02-03T04:05:06+07:00 ...>
DateTime.parse('3rd Feb 2001 04:05:06 PM')
#=> #<DateTime: 2001-02-03T16:05:06+00:00 ...>
还有Chronic gem,它可以更灵活地输入值。
获得DateTime或Time值后,您可以使用该对象的方法获取小时,分钟和秒字段:
now = Time.now # => 2012-10-03 07:50:26 -0700
now.hour # => 7
now.min # => 50
now.sec # => 26
或:
require 'date'
now = DateTime.now # => #<DateTime: 2012-10-03T07:52:53-07:00 ((2456204j,53573s,622304000n),-25200s,2299161j)>
now.hour # => 7
now.min # => 52
now.sec # => 53
答案 2 :(得分:1)
例如
start_at - 2011-04-26 04:14:56 UTC
几个小时:
start_at.strftime("%H") = "04"
分钟:
start_at.strftime("%M") = "14"
秒钟:
start_at.strftime("%S") = "26"
答案 3 :(得分:1)
在http://www.ruby-doc.org/core-1.9.3/Time.html
查看strftime
答案 4 :(得分:1)
start_at.strftime("%H %M %S")