Ich bin ein bisschen verwöhnt von der joda-time API von:
DateTime now = new DateTime();
DateTime ninetyDaysAgo = now.minusDays(90);
Ich versuche in Ruby etwas Ähnliches zu tun, aber ich bin es
now = Time.now
ninetyDaysAgo = now - (90*24)
Allerdings ist die Mathematik hier nicht in Ordnung (ich arbeite wirklich mit Daten um Mitternacht).
Gibt es eine benutzerfreundliche API für die Datumssubtraktion?
Date
erlaubt auch Brüche, so dass Sie tun könnenDate.today - (90.0/24.0)
. Das Ergebnis kann leicht konvertiert werdento_datetime
oderto_time
auch.Beachten Sie für Benutzer von Rails Folgendes:
quelle
Wenn Sie Rails verwenden oder ActiveSupport nicht einbeziehen möchten, können Sie das Numeric # days DSL wie folgt verwenden :
Da Sie mit Datumsangaben anstelle von Uhrzeiten arbeiten, sollten Sie entweder mit Datumsinstanzen beginnen oder Ihre DateTime-Intanzen mit #to_date konvertieren. Beim Addieren / Subtrahieren von Zahlen von Datumsinstanzen sind die Zahlen implizit Tage.
quelle
Ruby unterstützt Datumsarithmetik in den Klassen Date und DateTime , die Teil der Standardbibliothek von Ruby sind. Beide Klassen legen # + und # - Methoden offen, die Tage zu einem Datum oder einer Uhrzeit addieren und von diesen subtrahieren.
Verwenden Sie die Methoden # << und # >> , um Monate statt Tage zu bearbeiten. Die Arithmetik an Monaten unterscheidet sich ein wenig von der Arithmetik an Tagen. Die Verwendung von Datum anstelle von DateTime macht den Effekt deutlicher.
Nach Ihrem Beispiel aus der Joda-Zeit könnten Sie so etwas in Ruby schreiben.
oder vielleicht einfach nur
quelle
Dies ist ein super alter Beitrag, aber wenn Sie
Time
wie ursprünglich gefragt an einemDate
Objekt festhalten möchten , anstatt zu einem Objekt zu wechseln, sollten Sie die Verwendung in Betracht ziehenRuby Facets
.Ruby Facets ist eine standardisierte Bibliothek mit Erweiterungen für Ruby-Kernklassen.
http://rubyworks.github.io/facets/
Wenn Sie Facetten benötigen, können Sie mit Zeitobjekten Folgendes tun.
Time.now.less(90, :days)
quelle
Verwenden Sie die Anzahl der Sekunden:
quelle
Einfache Lösung:
quelle