जवाबों:
दिनांक (और दिनांक समय) कक्षाओं के साथ आप (end_date - start_date).to_iदिनों के अंतर की संख्या प्राप्त करने के लिए कर सकते हैं ।
Timeवस्तुएं हालांकि सेकंड भर में वापसी करती हैं।
Timeवस्तुओं का उल्लेख है , Dateवस्तुओं का नहीं । शायद आप अपनी टिप्पणी में नामकरण को अद्यतन करने के लिए यह दर्शा सकते हैं कि वे तिथियां नहीं हैं?
कि मान लिया जाये end_dateऔर start_dateवर्ग के दोनों कर रहे हैं ActiveSupport::TimeWithZoneरेल में है, तो आप उपयोग कर सकते हैं:
(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 होना चाहिए और जब तक आप आधी रात से पहले अपने कोड को नहीं चलाते हैं।
रेल में कुछ हेल्पर्स हैं जो आपके लिए इसे हल कर सकते हैं। एक बात का ध्यान रखें कि यह एक्शनव्यू हेल्पर्स का हिस्सा है, इसलिए वे कंसोल से सीधे उपलब्ध नहीं होंगे।
इसे इस्तेमाल करे
<% 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के रूप में ओ पी (टैग में) का अनुरोध किया। यह Railsअधिक विशिष्ट है, active supportहालांकि created_atमूल रूप से इसमें एक Modelविधि है Rails..
समय सीमा में दिनों की संख्या प्राप्त करने के लिए (बस सभी दिनों की गिनती)
(start_date..end_date).count
(start_date..end_date).to_a.size
#=> 32
2 तारीखों के बीच दिनों की संख्या प्राप्त करने के लिए
(start_date...end_date).count
(start_date...end_date).to_a.size
#=> 31
पिछले उत्तरों में से कोई भी (आज तक) दो तारीखों के बीच के दिनों में सही अंतर नहीं देता है।
एक है कि सबसे करीब आता है के द्वारा होता है thatdankent । एक पूर्ण उत्तर परिवर्तित होता है 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