2010-07-23 5 views
16

Ich möchte eine einfache Funktion schreiben in Stunden sagen:Wie subtrahiert man von einer Datetime?

Wie viel Zeit ist vergangen, seit dies erstellt wurde?

Meine Versuche:

-time = DateTime.now.hour - (self.created_at.hour) 

Wer weiß, wie dies auf Rails in Ruby zu tun?

+0

Das wird nicht funktionieren, weil Sie nur Stunden vergleichen, also wenn mehr als einen Tag vergeht, wird es ungenau sein, aber sonst sollte es immer noch zu einer Zahl berechnen. Stattdessen können Sie direkt 'DateTime.now - self.created_at' eingeben, was Ihnen den Zeitunterschied in Sekunden angibt. Was musst du tun? – Karl

+0

Das funktioniert nicht, da Sie DateTime nicht abziehen können, es sei denn, es handelt sich um eine Zeichenfolge. Und wenn es eine Schnur ist, wie stellst du es als eine Zeit wieder – Trip

Antwort

21

Rails in der Regel verwendet Time, nicht DateTime. Warum machst du nicht Time.now - self.created_at? Dann können Sie von Sekunden zu Stunden umwandeln, indem Sie durch 3600 dividieren.

7

Sie suchen nach der Funktion time_ago_in_words (from_time, include_seconds = false). Hier sind einige Beispiele aus der Dokumentation:

time_ago_in_words(3.minutes.from_now)  # => 3 minutes 
time_ago_in_words(Time.now - 15.hours)  # => 15 hours 
time_ago_in_words(Time.now)     # => less than a minute 
from_time = Time.now - 3.days - 14.minutes - 25.seconds  # => 3 days 
+4

dar Ich suche nicht nach Wörtern. Ich schaue mir an wie man eine DateTime von einer anderen DateTime subtrahiert – Trip

+1

In diesem Fall hat mckeed die richtige Antwort. – sosborn

16

Got it !. Zuerst müssen Sie sicherstellen, dass Ihre Daten in den gleichen Daten sind, es wird davon subtrahiert, ob es eine Zeit oder eine DateTime ist. Ich habe die Zeit gewählt. Dann teilen Sie es durch Rubys eingebaute Zeitmethoden. Dies entspricht in wie viele Tage, aber es kann auch sein, 1. Stunde. usw.

Verwandte Themen