답변:
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
s를 제거 할 수 있습니다 .
+99
+800
+180000
있습니까?
time_ago_in_words
(Rails 3.0 및 Rails 4.0) 를 사용하기위한 Andrew Marshall의 솔루션을 명확히하기 위해
당신이 볼 수 있다면
<%= 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 모듈 을 기본적으로 가져 오지 않습니다 .
NB 헬퍼를 컨트롤러로 가져 오는 것은 "레일 방식"이 아닙니다. 도우미는 뷰를 돕는 데 도움이됩니다. 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
여기에서 인스턴스 메소드를 살펴보십시오.
여기에는 어제, 내일, 시작 _ 주, 전 등과 같은 유용한 방법이 있습니다.
예 :
Time.now.yesterday
Time.now.ago(2.days).end_of_day
Time.now.next_month.beginning_of_month
Rails ActiveRecord 객체를 위해 보석을 작성했습니다. 이 예제에서는 created_at을 사용하지만 updated_at 또는 ActiveSupport :: TimeWithZone 클래스의 모든 항목에서도 작동합니다.
보석을 설치하고 TimeWithZone 인스턴스에서 'pretty'메소드를 호출하십시오.
또 다른 방법은 백엔드에서 일부 로직을 언로드하고 브라우저가 다음과 같은 Javascript 플러그인을 사용하여 작업을 수행하는 것입니다.