Подсчитать количество дней между двумя датами - PullRequest
133 голосов
/ 05 марта 2012

Как рассчитать количество дней между этими двумя датами?

start_date = Date.parse "2012-03-02 14:46:21 +0100"
end_date =  Date.parse "2012-04-02 14:46:21 +0200"

Ответы [ 8 ]

192 голосов
/ 05 марта 2012

С классами Date (и DateTime) вы можете выполнить (end_date - start_date).to_i, чтобы получить разницу в количестве дней.

99 голосов
/ 02 января 2013

Предполагая, что end_date и start_date относятся к классу ActiveSupport::TimeWithZone в Rails, вы можете использовать:

(end_date.to_date - start_date.to_date).to_i
32 голосов
/ 05 марта 2012

Rails имеет несколько встроенных помощников , которые могут решить эту проблему для вас.Следует иметь в виду, что это часть помощников Actionview, поэтому они не будут доступны непосредственно из консоли.

Попробуйте это

<% 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"
29 голосов
/ 23 ноября 2014

Я продолжал получать результаты в секундах, так что это сработало для меня:

(Time.now - self.created_at) / 86400
16 голосов
/ 07 декабря 2016

, чтобы получить количество дней в диапазоне времени (просто подсчет всех дней)

(start_date..end_date).count
(start_date..end_date).to_a.size
#=> 32

, чтобы получить количество дней между двумя датами

(start_date...end_date).count
(start_date...end_date).to_a.size
#=> 31
9 голосов
/ 04 февраля 2017

Ни один из предыдущих ответов (на эту дату) не дает правильной разницы в днях между двумя датами.

Тот, кто ближе всего, находится на , что данкент . Полный ответ конвертирует to_i и затем делит:

(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

В конкретном примере вопроса не следует анализировать Date, если прошедшее время уместно. Вместо этого используйте Time.parse.

3 голосов
/ 22 декабря 2017

Для указания количества целых дней между двумя датами (DateTime объектов):

((end_at - start_at).to_f / 1.day).floor
0 голосов
/ 05 марта 2012
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...