Yanıtlar:
Date (ve DateTime) sınıflarıyla (end_date - start_date).to_igün sayısı farkını elde etmek için yapabilirsiniz .
TimeNesneler saniyeler içinde geri döner.
Timenesnelere değil, Datenesnelere atıfta bulunması dışında . Belki yorumunuzdaki adları tarih olmadığını yansıtacak şekilde güncelleyebilirsiniz?
Rails'te sınıfın end_dateve start_dateher ikisinin de sınıf olduğunu varsayarsak, ActiveSupport::TimeWithZoneşunları kullanabilirsiniz:
(end_date.to_date - start_date.to_date).to_i
(Time.zone.now.to_date - 23.hours.ago.to_date).to_io 1 verir ve 0 olmalıdır,
Time.zone.now.to_date"Çar, 15 Kas 2017", 23.hours.ago.to_date"Sal, 14 Kas 2017" döndürür. Gün sayısındaki fark, kodunuzu gece yarısından önceki saatte çalıştırmadıysanız 1 olmalıdır.
Rails, bunu sizin için çözebilecek bazı yardımcılara sahiptir. Akılda tutulması gereken bir şey, bunun Actionview Helpers'ın bir parçası olduğu için doğrudan konsoldan kullanılamayacaklardır.
Bunu dene
<% 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"
Birkaç saniye içinde sonuç almaya devam ettim, bu yüzden bu benim için çalıştı:
(Time.now - self.created_at) / 86400
1.day, rubyOP'nin istediği gibi değildir (etiketlerde). Bu Railsya da daha spesifik active supportolsa created_attemelde bir Modelyöntemdir Rails..
bir zaman aralığındaki gün sayısını elde etmek için (yalnızca tüm günlerin sayısı)
(start_date..end_date).count
(start_date..end_date).to_a.size
#=> 32
2 tarih arasındaki gün sayısını almak için
(start_date...end_date).count
(start_date...end_date).to_a.size
#=> 31
Önceki yanıtların hiçbiri (bu tarihe kadar) iki tarih arasındaki günler arasında doğru farkı vermez.
En yakını o dankent . Tam bir cevap dönüştürülecek to_ive sonra bölünecektir:
(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
Sorunun özel örneğinde, Dategeçen zamanın alakalı olup olmadığı ayrıştırılmamalıdır . Time.parseBunun yerine kullanın .
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