Come si conta il numero di giorni tra queste due date?Contare il numero di giorni tra due date
start_date = Date.parse "2012-03-02 14:46:21 +0100"
end_date = Date.parse "2012-04-02 14:46:21 +0200"
Come si conta il numero di giorni tra queste due date?Contare il numero di giorni tra due date
start_date = Date.parse "2012-03-02 14:46:21 +0100"
end_date = Date.parse "2012-04-02 14:46:21 +0200"
con la data (e DateTime) le classi si può fare (end_date - start_date).to_i
per ottenere il numero di giorni differenza.
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
Rails è un po 'costruito in helpers che potrebbe risolvere questo problema per voi. Una cosa da tenere a mente è che questo fa parte degli Helpers di Actionview, quindi non saranno disponibili direttamente dalla console.
Prova questa
<% 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"
Supponendo che end_date
e start_date
sono entrambi di classe ActiveSupport::TimeWithZone
in Rails, allora si può usare:
(end_date.to_date - start_date.to_date).to_i
Se ha a che fare con i campi della tabella, questa risposta è la strada da percorrere; invece di quello più votato qui. – Ben
non funziona per '(Time.zone.now.to_date - 23.hours.ago.to_date) .to_i', dà 1 e dovrebbe essere 0 –
@YuriGhensev, dipende da quando si esegue il codice di esempio, per esempio in questo momento "Time.zone.now.to_date' restituisce" Wed, 15 nov 2017 ", mentre' 23.hours.ago.to_date' restituisce "Tue, 14 nov 2017". La differenza nel numero di giorni è e dovrebbe essere 1 a meno che il codice non sia stato eseguito nell'ora prima di mezzanotte. – lee
ho continuato a ottenere risultati in pochi secondi, quindi questo ha funzionato per me:
(Time.now - self.created_at)/86400
a 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 (ad oggi) dà la differenza corretta in giorni tra due date.
Quello più vicino è il thatdankent. Una risposta completa convertirebbe to_i
e poi dividere:
(Time.now.to_i - 23.hours.ago.to_i)/1.day
>> 0
(Time.now.to_i - 25.hours.ago.to_i)/1.day
>> 1
(Time.now.to_i - 1.day.ago.to_i)/1.day
>> 1
Nel caso specifico della questione, non si deve Analizza per Date
se il tempo trascorso è rilevante. Utilizzare invece Time.parse
.
di avere il numero di giorni interi tra due date (DateTime
oggetti):
sì, ma l'utente ha delle stringhe e non puoi farlo con le stringhe. Ne hai bisogno come date. Vedi la mia risposta per aggiungere to_date dalle estensioni principali. –
@MichaelDurrant Stai assumendo un'ipotesi ingiustificata. L'utente non specifica se sono stringhe o meno. Infatti, dal momento che stanno usando Rails è molto probabile che le date provengano da ActiveRecord, che le getterà automaticamente su oggetti data. Il testo dato è identico alla rappresentazione dell'oggetto Date, il che rende altamente probabile che provenga da una fonte nativa. –
Corretto, suppongo che l'utente abbia provato a - b e non ha funzionato, quindi hanno finito con la pubblicazione su SO. Immagino che solo andkjaer possa dirci il vero affare :) –