web-dev-qa-db-ja.com

Rails:日時から時間を取得する

1/10/2011 9:00:00のような日時値がある場合、その日時から午前9:00を取得するにはどうすればよいですか?

26
Jhorra

strftimeがそれを行います。

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

ここに他のすべての属性:

http://www.wetware.co.nz/blog/2009/07/Rails-date-formats-strftime/

39
Chris Barretto
DateTime.new(2011,10,1,9).to_s(:time) #=> "09:00"

DateTime.now.to_s(:time) #=> "11:58"

から Time docs

21
Eyal Levin

日時から時間で検索する必要がある場合

:conditions => ["created_at::time > ?",  "08:30" ]
5
maxcobmara

次のコードを使用して日時から時間を取得します

datetime.strftime("%I:%M %P")
4
Hitesh

文字列出力だけが必要な場合は、HiteshとChrisがstrftimeで言ったようにできますが、TimeのインスタンスからDateTimeのインスタンスを取得しようとしている場合は、次のようにできます。

Time.parse(DateTime.now.to_s)

"1/10/2011 9:00:00"のような文字列を解析してTimeのインスタンスを取得したい場合は、同じparseメソッドを使用できます。

Time.parse("1/10/2011 9:00:00") #=> 2011-10-01 09:00:00 -0500

次の形式に注意してください。Rubyは、日付を解析するときに、米国に適さない形式のd/m/yを使用します。

そのTimeインスタンスから時刻の文字列表現を出力するには、strftimeに戻ります。

うまくいけば、これで問題が解決します。

3
coreyward

翻訳あり

I18nを使用する場合、 独自の時間形式を簡単に定義できます

timeオブジェクトをI18n.lに渡す時間形式をローカライズするか、(できれば)Railsの#lヘルパーを使用します。 :formatオプションを渡すことでフォーマットを選択できます

# app/views/home/index.html.erb
<h1><%=t :hello_world %></h1>
<p><%= flash[:notice] %></p
<p><%= l Time.now, format: :short %></p>

# config/locales/pirate.yml
pirate:
  time:
    formats:
      short: "arrrround %H'ish"

書式設定オプションのリストについては、@ Chris Barrettoの回答を参照してください

0