2

如何将我的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 %>
4

5 回答 5

3

如果您只想将时间分成三个单独的输入,您可以使用time_select帮助程序。

否则使用该strftime方法;检查http://strfti.me以获得更多帮助。

于 2012-10-03T13:21:14.693 回答
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
于 2012-10-03T14:48:59.237 回答
1
start_at.strftime("%H %M %S")

更详细的文档位于:http ://www.ruby-doc.org/core-1.9.3/Time.html

于 2012-10-03T13:22:04.980 回答
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"
于 2012-10-03T13:18:21.767 回答
1

查看strftimehttp://www.ruby-doc.org/core-1.9.3/Time.html _

于 2012-10-03T13:20:38.793 回答