Ответы:
С помощью классов Date (и DateTime) вы можете (end_date - start_date).to_i
получить разницу в количестве дней.
Time
объекты возвращают секунды, хотя.
Time
объекты, а не Date
объекты. Возможно, вы могли бы обновить названия в своем комментарии, чтобы отразить, что они не являются датами?
Предполагая, что end_date
и start_date
оба класса ActiveSupport::TimeWithZone
в Rails, вы можете использовать:
(end_date.to_date - start_date.to_date).to_i
(Time.zone.now.to_date - 23.hours.ago.to_date).to_i
, он дает 1 и должен быть 0
Time.zone.now.to_date
возвращает «ср, 15 ноября 2017», а 23.hours.ago.to_date
возвращает «вт, 14 ноя 2017». Разница в количестве дней равна и должна быть равна 1, если вы не запускали свой код за час до полуночи.
В 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"
Я продолжал получать результаты в секундах, так что это сработало для меня:
(Time.now - self.created_at) / 86400
1.day
не ruby
соответствует требованию OP (в тегах). Это Rails
или более конкретно, active support
хотя created_at
это в основном Model
метод в Rails
так ..
чтобы получить количество дней во временном интервале (просто подсчет всех дней)
(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
Ни один из предыдущих ответов (на эту дату) не дает правильной разницы в днях между двумя датами.
Тот, что ближе всего, - тот, кто готов . Полный ответ преобразовал бы 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
вместо этого.
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