Я пишу приложение на Rails, но, похоже, не могу найти, как сделать относительное время, то есть, если задан определенный класс времени, оно может вычислять «30 секунд назад» или «2 дня назад» или если оно длиннее месяца «01.09.2008» и др.
ruby-on-rails
ruby
Джон Топли
источник
источник
Ответы:
Похоже, вы ищете
time_ago_in_words
метод (илиdistance_of_time_in_words
), из ActiveSupport. Назовите это так:источник
ActiveSupport
, это определено вActionView::Helpers::DateHelper
.helper
который вы можете вызвать и получить доступ к этим методам.helper.time_ago_in_words(timestamp)
require 'active_support/core_ext'
сначала, а затем все готово для использования7.days.ago
и других подобных конструкций.Я написал это, но должен проверить существующие методы, упомянутые, чтобы видеть, лучше ли они.
источник
return
строку внутриcase
оператораelse
и удалить всеreturn
s.+99
+800
+180000
?Просто чтобы прояснить решение Эндрю Маршалла об использовании time_ago_in_words
(для Rails 3.0 и Rails 4.0)
Если вы в представлении
Если вы находитесь в контроллере
Контроллеры не имеют модуль ActionView :: Helpers :: DateHelper, импортированный по умолчанию.
NB Это не "путь рельсов", чтобы импортировать помощников в ваши контроллеры. Помощники для того, чтобы помочь взглядам. Time_ago_in_words метод решил быть вид объект в MVC триаде. (Я не согласен, но когда в Риме ...)
источник
Что о
Или что-то еще, за что вы стреляли?
источник
Вы можете использовать арифметические операторы, чтобы сделать относительное время.
Даст вам 2 дня назад.
источник
2.days.since
или2.days.from_now
Нечто подобное будет работать.
источник
#{diff_seconds/360}
должно быть#{diff_seconds/3600}
. Я редактировал это.Поскольку большинство ответов здесь предлагает time_ago_in_words .
Вместо того, чтобы использовать :
В Rails предпочитаю:
вместе с библиотекой jQuery http://timeago.yarp.com/ , с кодом:
Основное преимущество: кеширование
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
источник
time_ago_in_words
не время SВзгляните на методы экземпляра здесь:
http://apidock.com/rails/Time
Это имеет полезные методы, такие как вчера, завтра, begin_of_week, назад и т. Д.
Примеры:
источник
Я написал гем, который делает это для объектов Rails ActiveRecord. В этом примере используется create_at, но он также будет работать с updated_at или чем-то еще с классом ActiveSupport :: TimeWithZone.
Просто установите gem и вызовите метод pretty в вашем экземпляре TimeWithZone.
https://github.com/brettshollenberger/hublot
источник
Если вы создаете приложение Rails, вы должны использовать
Это дает вам время или дату в часовом поясе, с которым вы настроили приложение Rails.
Например, если вы сконфигурируете свое приложение для использования UTC, тогда
Time.zone.now
всегда будет время по UTC (например, изменение British Summertime не повлияет на это).Рассчитать относительное время легко, например
источник
Другой подход заключается в том, чтобы выгрузить некоторую логику из серверной части и заставить браузер выполнять эту работу с помощью плагинов Javascript, таких как:
JQuery время назад или его адаптация Rails Gem
источник