2

start_at列を1つだけではなく、時間、分、秒の3つの異なるフィールドに解析するにはどうすればよいですか?

:3つの異なる列を作成するのではなく、1つの列として保持したいと思います。

これが私のコードです:

テーブル:

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

時間を3つの別々の入力に分割したいだけの場合は、time_selectヘルパーを使用できます。

それ以外の場合は、strftimeメソッドを使用します。詳細については、 http://strfti.meを確認してください。

于 2012-10-03T13:21:14.693 に答える
2

時間の値がどの形式であるかはわかりません。ユーザーは異なることが好きなので、自由形式のテキストフィールドをユーザーに与えると、さまざまな形式のデータを取得できる可能性が非常に高くなります。そのため、次のことを行う必要があります。柔軟です。

parseフォーマットにある程度の柔軟性を提供するDateTimeのメソッドを使用してみることができます。

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 ...>

クロニックジェムもあり、値の入力方法をさらに柔軟に設定できます。

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

http://www.ruby-doc.org/core-1.9.3/Time.htmlでチェックアウトstrftimeしてください

于 2012-10-03T13:20:38.793 に答える
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
start_at.strftime("%H %M %S")

より詳細なドキュメントは次の場所にあります:http ://www.ruby-doc.org/core-1.9.3/Time.html

于 2012-10-03T13:22:04.980 に答える