web-dev-qa-db-ja.com

Rails 1日の午前/午後12時間の範囲

これは本当に簡単な質問で、おそらく以前に質問され、答えられたことがありますが、私は何も見つけることができませんでした。

とにかく、私は12時間の範囲/配列が必要なので、午前12時から午前11時、午後12時から午後11時のようになります。あなたはおそらくそれの要点を理解します。現在、AMを1つの配列にマッピングし、PMを別の配列にマッピングしてから、2つの配列を結合するという非常に複雑な方法を実行しようとしています。もっと簡単な方法が必要です。この。

Rails time_selectについては知っていますが、提供されているものとは異なる形式が必要です。何か提案はありますか?

説明:つまり、私が探しているのは 12時間制 で、午前と午後です。 24時間制が必要な場合は、(0..24)を実行するだけで完了できます。ただし、12時間制は午前12時から11時までで、午後12時から11時までです。私は誰かが以前にこれをしたとかなり確信しています。

14
irosenb

@MrYoshiのコメントに同意します。日付をフォーマットする最も簡単な方法は、.strftime()です。可能なすべてのオプションについては RubyDoc を参照してください。

例:

Time.now.strftime("%I:%M %p")

出力:HH:MM AM

またはあなたが文字通り求めたもの:

Time.now.strftime("%I:00")

出力:HH:00

あなたが言ったようにtime_select私はあなたがユーザーが選択可能な範囲として時間を提供したいと思うので、time_selectより多くのオプション )のためにこれらのオプションを試してください:

time_select 'game', 'game_time', {:minute_step => 60, :ampm => true}

また、この前の質問: Rails 3? の12時間形式の時間選択フォームヘルパー

23

Railsはこれを組み込みます

   <%= f.time_select :start,  {ampm: true} %>  

http://api.rubyonrails.org/classes/ActionView/Helpers/DateHelper.html#method-i-time_select

6
Will

私はこれがビルトインですでにしばらく前に答えられていることを知っています。しかし、私はこれらの値を取得するためにカスタム関数が必要であり、これを書きました:

times = {"12 AM" => 0}.merge!(1.upto(11).collect { |n| {"#{n} AM" => n} }.reduce(Hash.new, :merge)).merge!({"12 PM" => 12}).merge!(1.upto(11).collect { |n| {"#{n} PM" => n + 12} }.reduce(Hash.new, :merge))

これにより、次のようになります。

{"12 AM"=>0, "1 AM"=>1, "2 AM"=>2, "3 AM"=>3, "4 AM"=>4, "5 AM"=>5, "6 AM"=>6, "7 AM"=>7, "8 AM"=>8, "9 AM"=>9, "10 AM"=>10, "11 AM"=>11, "12 PM"=>12, "1 PM"=>13, "2 PM"=>14, "3 PM"=>15, "4 PM"=>16, "5 PM"=>17, "6 PM"=>18, "7 PM"=>19, "8 PM"=>20, "9 PM"=>21, "10 PM"=>22, "11 PM"=>23}
5
Aeramor