3

必要なものに対する解決策は既にあると確信していますが、何を検索すればよいかわかりません。正しい方向への指示はありますか?

Rails のようなものを考えていdistance_of_time_in_words_to_nowます。

ありがとうございました。

4

3 に答える 3

10

このようなヘルパーを使用できると思います。

def custom_format(date)
  if date == Date.today
    "Today"
  elsif date == Date.yesterday
    "Yesterday"
  elsif (date > Date.today - 7) && (date < Date.yesterday)
    date.strftime("%A")
  else
    date.strftime("%B %-d")
  end
end

コードをテストしませんでした。これは問題への単なるポインタです。

于 2012-12-19T10:35:52.217 に答える
5

ファイル .../config/initializers/time_format.rb を作成し、次のコードを入れます。

Time::DATE_FORMATS[:humanized_ago]  = ->(time) do
  st = Time.now.beginning_of_day
  nd = Time.now.end_of_day

  case 
  when time.between?(st + 1.day, nd + 1.day)
    "Tomorrow #{time.strftime('%H:%M')}"
  when time.between?(st, nd)
    "Today #{time.strftime('%H:%M')}"
  when time.between?(st - 1.day, nd - 1.day)
    "Yesterday #{time.strftime('%H:%M')}"
  when time.between?(st - 6.day, nd - 2.day)
    time.strftime('%a %H:%M')
  else 
    time.strftime('%y-%b-%d %H:%M')
  end
end

Rails Time オブジェクトで、 function を呼び出しますtime.to_s(:humanized_ago)。「:humanized_ago」という記号が気に入らない場合は、time_format.rb の最初の行で好きなように変更してください。他のフォーマットが必要な場合は、それを理解することができます。

理由があって、私が行った方法で比較を書きました。Ruby の組み込み範囲を使用して時間をテストする方法が見つかりませんでした。終了点を除いて時間間隔をテストできるようにする必要があります。

于 2014-01-16T00:10:12.920 に答える
1

これを試して

<%= time_ago_in_words(time) %> ago
于 2012-12-19T10:36:15.090 に答える