2013-09-04 5 views

Antwort

5

Es ist das erwartete Verhalten. Vom docs:

d - anderen → Datum oder rational

Date.new(2001,2,3) - 1    #=> #<Date: 2001-02-02 ...> 
Date.new(2001,2,3) - Date.new(2001) #=> (33/1) 

Ein rationaler Typ verwendet wird, weil es den Unterschied genau ausdrücken kann:

diff = DateTime.new(2001,2,3) - DateTime.new(2001,2,2,1) 
#=> (23/24) 

Des Schwimmer kann nicht:

diff.to_f 
#=> 0.9583333333333334 
+0

Wie kann ich Rational in Minuten konvertieren? –

+1

@AlexanderSupertramp multiplizieren mit 1440 (1 Tag = 1440 Minuten) – Stefan

2

Because möchten Sie vielleicht einen Unterschied zwischen zwei DateTime s finden, die Rational sein können. Z.B .:

DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12) 
# ⇒ (1/2) 
+0

Ob die beiden Zeiten ** weniger als einen Tag auseinander liegen ** spielt keine Rolle. Selbst für zwei Mal, die mehrere Jahre auseinander liegen, benötigen Sie diese Funktion, um den Unterschied mit der ** Genauigkeit von weniger als einem Tag ** zu kennen. – sawa

+0

Ich habe gerade ein Beispiel von Ruby-Doc verwendet. – mudasobwa

+0

Ich erwähne dein Beispiel nicht. Ich erwähne deine Erklärung. – sawa

0

Weil manchmal ein solcher Vergleich wie unten passieren würde:

date_sent = DateTime.parse("2013-01-01 12:00:00") # with half a day 
date_now = Date.today 

days = (date_now - date_sent) # => (491/2) 
2

Das war auch für mich verwirrend.

Der Unterschied zwischen Tagen ist immer eine ganze Zahl, also warum es als eine rationale ausdrücken?

Das ist, weil es "s der gleiche Rückgabetyp verwendet, um den Unterschied zwischen einem Datum auszudrücken und einem DateTime- oder zwei Datetime. Sie können einen Unterschied zwischen zwei Zeit ausdrücken können.

Ich persönlich bin nicht davon überzeugt, es ist die beste Wahl, zum Beispiel:

Time.now.to_datetime-Date.today 

kehrt:

=> (44150896597/86400000000) 

Es denkt, das war deutlicher:

=> 0.5110978639814815 
Verwandte Themen