denke du meinst subtrahiere das Startdatum vom Enddatum :)
Nader
99
Art von antiklimaktischen wie?
Brig
18
Hinweis: Wenn Sie Wirble in irb verwenden (um die Ausgabe einzufärben), wird die rationale Zahl mit einer 1 bis zum Ende verkettet. Huch! Vielleicht möchten Sie to_i verwenden, um das Ergebnis in eine Ganzzahl
umzuwandeln
9
Wenn Sie ein DateTimeObjekt haben, müssen Sie es Datezuerst konvertieren , andernfalls wird die Anzahl der Sekunden zurückgegeben (ich denke).
Joshua Muheim
44
Beachten DateSie auch, Rationaldass Sie durch Subtrahieren von zwei Objekten möglicherweise eine Ganzzahl (endDate - beginDate).to_i
eingeben müssen
98
irb(main):005:0> a =Date.parse("12/1/2010")=>#<Date: 4911063/2,0,2299161>
irb(main):007:0> b =Date.parse("12/21/2010")=>#<Date: 4911103/2,0,2299161>
irb(main):016:0> c = b.mjd - a.mjd
=>20
Das julianische Datum (JD) ist das Zeitintervall in Tagen und Bruchteilen eines Tages seit dem 1. Januar 4713 v. Chr. Greenwich-Mittag, julianischer proleptischer Kalender.
Die Reihe besteht aus einer Reihe einzigartiger Serien. Und ...ist ein exklusives Range-Literal.
So beginDate..(endDate - 1)ist es auch. Außer ist nicht.
Wenn beginDate gleich endDate ist , wird das erste Element aufgrund der Eindeutigkeit ausgeschlossen und ...das letzte ausgeschlossen. Wenn wir also .countzwischen heute und heute datieren möchten, wird 0 zurückgegeben.
Dies ist eine sehr gute Antwort. Wenn das beginDate älter als das endDate ist, wird es zurückgegeben 0, was in einigen Fällen perfekt funktioniert. Wenn die beiden Daten identisch sind, wird 0 zurückgegeben. Außerdem wird eine einfache Ganzzahl zurückgegeben. Andere Antworten müssen in ganze Zahlen umgewandelt werden, oder Sie müssen möglicherweise in 0 übersetzen, wenn das Ergebnis negativ ist.
Ein Leckerbissen: DateTime.parse in Ruby erwartet, dass das Datum als TT / MM / JJJJ oder TT-MM-JJJJ angegeben wird. Als Amerikaner wirft es mich immer ab!
Rickumali
15
@rickumali Als Mitglied aus dem Rest der Welt danke ich Ruby für die Verwendung von "unserem" Standard-Datumsformat.
Claudio Holanda
7
@rickumali Ruby akzeptiert das Datum auch im YYYY-MM-DDFormat, was sowieso jeder verwenden sollte.
Das Datum wird in Tagen angegeben, Sie müssen dies also nicht tun. Ich denke, Ihre Lösung wird mit DateTime-Unterschieden relevant.
suga_shane
1
Nun, pass auf, was du auch mit "zwischen" meinst ...
days_apart =(to - from).to_i # from + days_apart = to
total_days =(to - from).to_i +1# number of "selected" days
in_between_days =(to - from).to_i -1# how many days are in between from and to, i.e. excluding those two days
DateTime
Objekt haben, müssen Sie esDate
zuerst konvertieren , andernfalls wird die Anzahl der Sekunden zurückgegeben (ich denke).Date
Sie auch,Rational
dass Sie durch Subtrahieren von zwei Objekten möglicherweise eine Ganzzahl(endDate - beginDate).to_i
Dies verwendet eine modifizierte julianische Tagesnummer .
Aus Wikipedia :
quelle
Dies hat sich möglicherweise in Ruby 2.0 geändert
Wenn ich das mache, bekomme ich einen Bruchteil. Zum Beispiel auf der Konsole (entweder irb oder Schienen c)
Natürlich ergibt das Casting auf ein int das erwartete Ergebnis
Dies funktioniert auch für DateTime-Objekte, Sie müssen jedoch Sekunden berücksichtigen, wie in diesem Beispiel
quelle
In Ruby 2.1.3 haben sich folgende Dinge geändert:
quelle
Wie wäre es damit?
Die Reihe besteht aus einer Reihe einzigartiger Serien. Und
...
ist ein exklusives Range-Literal.So
beginDate..(endDate - 1)
ist es auch. Außer ist nicht.Wenn beginDate gleich endDate ist , wird das erste Element aufgrund der Eindeutigkeit ausgeschlossen und
...
das letzte ausgeschlossen. Wenn wir also.count
zwischen heute und heute datieren möchten, wird 0 zurückgegeben.quelle
0
, was in einigen Fällen perfekt funktioniert. Wenn die beiden Daten identisch sind, wird 0 zurückgegeben. Außerdem wird eine einfache Ganzzahl zurückgegeben. Andere Antworten müssen in ganze Zahlen umgewandelt werden, oder Sie müssen möglicherweise in 0 übersetzen, wenn das Ergebnis negativ ist.Das hat bei mir funktioniert:
quelle
Versuche dies:
quelle
All dies führte mich zum richtigen Ergebnis, aber ich endete damit
quelle
YYYY-MM-DD
Format, was sowieso jeder verwenden sollte.Tage = (endDate - beginDate) / (60 * 60 * 24)
quelle
Nun, pass auf, was du auch mit "zwischen" meinst ...
quelle