Risposte:
Con le classi Date (e DateTime) puoi fare (end_date - start_date).to_iper ottenere la differenza del numero di giorni.
Timegli oggetti restituiscono però dei secondi.
Timeoggetti, non agli Dateoggetti. Forse potresti aggiornare la denominazione nel tuo commento per riflettere che non sono date?
Supponendo che end_datee start_datesono entrambi di classe ActiveSupport::TimeWithZonein Rails, allora si può usare:
(end_date.to_date - start_date.to_date).to_i
(Time.zone.now.to_date - 23.hours.ago.to_date).to_i, dà 1 e dovrebbe essere 0
Time.zone.now.to_daterestituisce "Mer, 15 nov 2017", mentre 23.hours.ago.to_daterestituisce "Mar, 14 nov 2017". La differenza nel numero di giorni è e dovrebbe essere 1 a meno che non sia stato eseguito il codice nell'ora prima di mezzanotte.
Rails ha alcuni helper integrati che potrebbero risolverlo per te. Una cosa da tenere a mente è che questo fa parte degli Helpview di Actionview, quindi non saranno disponibili direttamente dalla console.
Prova questo
<% start_time = "2012-03-02 14:46:21 +0100" %>
<% end_time = "2012-04-02 14:46:21 +0200" %>
<%= distance_of_time_in_words(start_time, end_time) %>
"about 1 month"
Continuavo a ottenere risultati in pochi secondi, quindi questo ha funzionato per me:
(Time.now - self.created_at) / 86400
1.daynon è rubycome richiesto dall'OP (nei tag). È Railso più specifico active supportanche se in created_atpratica è un Modelmetodo in Railstal modo ...
per ottenere il numero di giorni in un intervallo di tempo (solo un conteggio di tutti i giorni)
(start_date..end_date).count
(start_date..end_date).to_a.size
#=> 32
per ottenere il numero di giorni tra 2 date
(start_date...end_date).count
(start_date...end_date).to_a.size
#=> 31
Nessuna delle risposte precedenti (a questa data) fornisce la differenza corretta in giorni tra due date.
Quello che si avvicina di più è quello che è umido . Una risposta completa verrebbe convertita to_ie quindi divisa:
(Time.now.to_i - 23.hours.ago.to_i) / 86400
>> 0
(Time.now.to_i - 25.hours.ago.to_i) / 86400
>> 1
(Time.now.to_i - 1.day.ago.to_i) / 86400
>> 1
Nell'esempio specifico della domanda, non si dovrebbe analizzare Datese il tempo trascorso è rilevante. Usa Time.parseinvece.
def business_days_between(date1, date2)
business_days = 0
date = date2
while date > date1
business_days = business_days + 1 unless date.saturday? or date.sunday?
date = date - 1.day
end
business_days
end