如何将时间字段分解为小时,分钟和秒?

时间:2012-10-03 13:11:25

标签: ruby-on-rails ruby

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

5 个答案:

答案 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)

答案 4 :(得分:1)

start_at.strftime("%H %M %S")

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