回答:
ActiveSupportからtime_ago_in_words
メソッド(またはdistance_of_time_in_words
)を探しているようです。次のように呼び出します。
<%= time_ago_in_words(timestamp) %>
ActiveSupport
はなく、で定義されていActionView::Helpers::DateHelper
ます。
helper
これらのメソッドを呼び出してアクセスできるコンソールメソッドが呼び出されます。 helper.time_ago_in_words(timestamp)
require 'active_support/core_ext'
次のことを実行してください。最初に、次に、使用するための準備が整い 7.days.ago
ました。
私はこれを書きましたが、言及されている既存のメソッドをチェックして、より優れているかどうかを確認する必要があります。
module PrettyDate
def to_pretty
a = (Time.now-self).to_i
case a
when 0 then 'just now'
when 1 then 'a second ago'
when 2..59 then a.to_s+' seconds ago'
when 60..119 then 'a minute ago' #120 = 2 minutes
when 120..3540 then (a/60).to_i.to_s+' minutes ago'
when 3541..7100 then 'an hour ago' # 3600 = 1 hour
when 7101..82800 then ((a+99)/3600).to_i.to_s+' hours ago'
when 82801..172000 then 'a day ago' # 86400 = 1 day
when 172001..518400 then ((a+800)/(60*60*24)).to_i.to_s+' days ago'
when 518400..1036800 then 'a week ago'
else ((a+180000)/(60*60*24*7)).to_i.to_s+' weeks ago'
end
end
end
Time.send :include, PrettyDate
return
のcase
ステートメント内に最後の行を入れて、else
すべてのを削除できreturn
ます。
+99
+800
+180000
か誰かが言うことができますか?
Andrew Marshallがtime_ago_in_words
を使用するためのソリューションを明確にするため
(Rails 3.0およびRails 4.0の場合)
あなたがビューにいる場合
<%= time_ago_in_words(Date.today - 1) %>
コントローラにいる場合
include ActionView::Helpers::DateHelper
def index
@sexy_date = time_ago_in_words(Date.today - 1)
end
コントローラーには、デフォルトでインポートされるモジュールActionView :: Helpers :: DateHelperがありません。
注意ヘルパーをコントローラーにインポートするのは「レールの道」ではありません。ヘルパーはビューを支援するためのものです。time_ago_in_wordsの方法があることが決定されたビュー内のエンティティMVCのトライアド。(私は同意しませんが、ローマにいるとき...)
算術演算子を使用して、相対時間を計算できます。
Time.now - 2.days
2日前に差し上げます。
2.days.since
または2.days.from_now
このようなものが機能します。
def relative_time(start_time)
diff_seconds = Time.now - start_time
case diff_seconds
when 0 .. 59
puts "#{diff_seconds} seconds ago"
when 60 .. (3600-1)
puts "#{diff_seconds/60} minutes ago"
when 3600 .. (3600*24-1)
puts "#{diff_seconds/3600} hours ago"
when (3600*24) .. (3600*24*30)
puts "#{diff_seconds/(3600*24)} days ago"
else
puts start_time.strftime("%m/%d/%Y")
end
end
#{diff_seconds/360}
する必要があります#{diff_seconds/3600}
。編集しました。
ここでのほとんどの答えはtime_ago_in_wordsを示唆しているので。
代わりに:
<%= time_ago_in_words(comment.created_at) %>
Railsでは、以下を優先します。
<abbr class="timeago" title="<%= comment.created_at.getutc.iso8601 %>">
<%= comment.created_at.to_s %>
</abbr>
jQueryライブラリhttp://timeago.yarp.com/とともに、コード:
$("abbr.timeago").timeago();
主な利点:キャッシング
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
time_ago_in_words
、時間S
ここでインスタンスメソッドを見てください。
これには、昨日、明日、begining_of_week、前などの便利なメソッドがあります。
例:
Time.now.yesterday
Time.now.ago(2.days).end_of_day
Time.now.next_month.beginning_of_month
Rails ActiveRecordオブジェクトに対してこれを行うgemを作成しました。この例では、created_atを使用していますが、updated_atまたはActiveSupport :: TimeWithZoneクラスのすべてに対しても機能します。
gem installして、TimeWithZoneインスタンスで 'pretty'メソッドを呼び出すだけです。
別のアプローチは、バックエンドからいくつかのロジックをアンロードし、ブラウザに次のようなJavaScriptプラグインを使用してジョブを実行させることです。