Відповіді:
За допомогою класів 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
повертається "Wed, 15 Nov 2017", а 23.hours.ago.to_date
повертається "Tue, 14 Nov 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"
щоб отримати кількість днів у часовому діапазоні (лише кількість усіх днів)
(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