Ich schreibe eine Rails-Anwendung, kann aber anscheinend nicht herausfinden, wie die relative Zeit zu berechnen ist. Wenn eine bestimmte Zeitklasse angegeben ist, kann sie "vor 30 Sekunden" oder "vor 2 Tagen" berechnen oder länger als einen Monat dauern "01.09.2008" usw.
ruby-on-rails
ruby
John Topley
quelle
quelle
Antworten:
Klingt so, als würden Sie nach der
time_ago_in_words
Methode (oderdistance_of_time_in_words
) von ActiveSupport suchen. Nennen Sie es so:quelle
ActiveSupport
, es ist definiert inActionView::Helpers::DateHelper
.helper
, mit der Sie diese Methoden aufrufen und darauf zugreifen können.helper.time_ago_in_words(timestamp)
require 'active_support/core_ext'
Zuerst, und dann sind Sie bereit,7.days.ago
andere ähnliche Konstrukte zu verwenden.Ich habe dies geschrieben, muss aber die vorhandenen Methoden überprüfen, um festzustellen, ob sie besser sind.
quelle
return
Zeile in diecase
Anweisung unter einfügenelse
und allereturn
s entfernen .+99
+800
+180000
?Nur um Andrew Marshalls Lösung für die Verwendung von time_ago_in_words
(für Rails 3.0 und Rails 4.0) zu verdeutlichen
Wenn Sie in einer Ansicht sind
Wenn Sie sich in einem Controller befinden
In Controllern ist das Modul ActionView :: Helpers :: DateHelper standardmäßig nicht importiert.
NB Es ist nicht "der Schienenweg", Helfer in Ihre Controller zu importieren. Helfer sind für helfende Ansichten. Die Methode time_ago_in_words wurde als Ansichtsentität in der MVC- Triade festgelegt. (Ich stimme nicht zu, aber wenn in Rom ...)
quelle
Wie wäre es mit
Oder etwas anderes, für das Sie gedreht haben?
quelle
Sie können die arithmetischen Operatoren verwenden, um die relative Zeit zu berechnen.
Wird Ihnen vor 2 Tagen geben.
quelle
2.days.since
oder2.days.from_now
So etwas würde funktionieren.
quelle
#{diff_seconds/360}
sollte sein#{diff_seconds/3600}
. Ich habe es bearbeitet.Da schlägt die meiste Antwort hier time_ago_in_words vor .
Anstatt zu verwenden:
In Rails bevorzugen Sie:
zusammen mit einer jQuery-Bibliothek http://timeago.yarp.com/ mit Code:
Hauptvorteil: Caching
http://rails-bestpractices.com/posts/2012/02/10/not-use-time_ago_in_words/
quelle
time_ago_in_words
nicht Zeit SSchauen Sie sich hier die Instanzmethoden an:
http://apidock.com/rails/Time
Dies hat nützliche Methoden wie gestern, morgen, Beginn der Woche, vor usw.
Beispiele:
quelle
Ich habe ein Juwel geschrieben, das dies für Rails ActiveRecord-Objekte tut. Das Beispiel verwendet created_at, funktioniert jedoch auch mit updated_at oder anderen Elementen mit der Klasse ActiveSupport :: TimeWithZone.
Einfach installieren und die 'hübsche' Methode auf Ihrer TimeWithZone-Instanz aufrufen.
https://github.com/brettshollenberger/hublot
quelle
Wenn Sie eine Rails-Anwendung erstellen, sollten Sie diese verwenden
Dies gibt Ihnen Zeit oder Datum in der Zeitzone an, mit der Sie Ihre Rails-Anwendung konfiguriert haben.
Wenn Sie beispielsweise Ihre Anwendung für die Verwendung von UTC konfigurieren, befindet sie
Time.zone.now
sich immer in UTC-Zeit (dies wird beispielsweise nicht durch die Änderung der britischen Sommerzeit beeinflusst).Die Berechnung der relativen Zeit ist einfach, z
quelle
Ein anderer Ansatz besteht darin, eine Logik aus dem Backend zu entladen und den Browser mithilfe von Javascript-Plugins zu erledigen, z. B.:
jQuery vor einiger Zeit oder seine Rails Gem-Anpassung
quelle