मैं के साथ एक घटना है start_timeऔर end_timeऔर अगर घटना "का कार्य प्रगति पर है" जाँच करना चाहते हैं। यह देखना होगा कि आज की तारीख दो तारीखों के बीच की सीमा में है या नहीं।
आप एक समारोह में यह कैसे करेंगे?
जवाबों:
===दरअसल, एक ऑपरेटर है जो ऐसा करेगा। ऑपरेटर का उपयोग करके ऑब्जेक्ट बनाएं Rangeऔर उसकी तुलना करें ।Time===
start = Time.now.to_i
range = start..(start + 2)
inside = start + 1
outside = start + 3 # ok, now...
range === inside # true
range === outside # false
irbउदाहरण भी ठीक काम करता था लेकिन इंटरैक्टिव उदाहरण हमेशा कुछ प्रयोगों में सही ढंग से पुन: पेश नहीं किया गया था। यह एक कट-एंड-पेस्ट करना आसान है।
अब यह सब सीधा हो गया है।
.to_iऔर फिर ===यह देखने के लिए उपयोग किया जाता है कि क्या वे सीमा में हैं। IMO, .coverage?खजूर के लिए एक बेहतर उपाय है।
रूबी में 1.9.2 ===काम नहीं करता है, मुझे एक त्रुटि मिलती है:
irb(main):019:0> (Time.now .. (Time.now+1)) === Time.now
TypeError: can't iterate from Time
from (irb):19:in `each'
from (irb):19:in `include?'
from (irb):19:in `include?'
from (irb):19:in `==='
from (irb):19
from /opt/ruby192/bin/irb:12:in `<main>'
इसके बजाय उपयोग करें #cover?:
irb(main):002:0> (Time.now..Time.now+4).cover?(Time.now)
=> true
irb(main):003:0> (Time.now..Time.now+4).cover?(Time.now+10)
=> false
cover?विधि से अनजान था
Dateही यह काम करता है(Date.yesterday..Date.tomorrow).cover?(Date.today) => true
===रूबी 1.9.2 में ठीक काम करता है। आप बस भूल गए.to_i
यदि आप रेल का उपयोग कर रहे हैं तो आप उपयोग कर सकते हैं TimeWithZone#between?। फिर आपके पास कुछ इस तरह होगा:
> start_time = Time.zone.parse('12pm') => Thu, 26 Jul 2012 12:00:00 EDT -04:00
> end_time = start_time + 1.hour => Thu, 26 Jul 2012 13:00:00 EDT -04:00
> inside = Time.zone.parse('12:30pm') => Thu, 26 Jul 2012 12:30:00 EDT -04:00
> outside = Time.zone.parse('1:30pm') => Thu, 26 Jul 2012 13:30:00 EDT -04:00
> inside.between?(start_time, end_time) => true
> outside.between?(start_time, end_time) => false
क्योंकि दिनांक वर्ग में तुलनात्मक मॉड्यूल शामिल है, प्रत्येक दिनांक ऑब्जेक्ट में एक between?विधि होती है।
require 'date'
today = Date.today
tomorrow = today + 1
one_month_later = today >> 1
tomorrow.between?(today, one_month_later) # => true
यदि आप रेल का उपयोग कर रहे हैं, तो आप यह कोशिश कर सकते हैं:
ruby-1.8.7-p299 :015 > a = DateTime.now
=> Fri, 02 Dec 2011 11:04:24 -0800
ruby-1.8.7-p299 :016 > (a.beginning_of_day..a.end_of_day).include_with_range? a
=> true
ruby-1.8.7-p299 :017 > (a.beginning_of_day..a.end_of_day).include_with_range? a+10.days
=> false
ruby-1.8.7-p299 :018 > (a.beginning_of_day..a.end_of_day).include_with_range? a+25.hours
=> false
ruby-1.8.7-p299 :019 > (a.beginning_of_day..a.end_of_day).include_with_range? a+2.hours
=> true
नोट: मैंने अभी उपयोग किया है beginning_of_dayऔर end_of_dayएक आसान सीमा प्रदान करता है। include_with_range?एक सीमा पर महत्वपूर्ण हिस्सा विधि है।
include_with_rangeइसका उपयोग करने का विकल्प चुना क्योंकि यह ऐसा मामला नहीं था जहां एक रेंज की तुलना में रेंज की जा रही थी। शायद किसी तरह का ब्रेन ट्यूमर। अच्छा पकड़, धन्यवाद @TylerRick। @ हर्ड उत्तर वास्तव में सबसे अच्छा है।
यदि वे टाइमस्टैम्प हैं:
in_progress को हराया? (start_time..end_time) .include? (Time.now) समाप्त
TypeError: can't iterate from Time
चेक की गई वर्तमान तिथि दो तिथियों के बीच है। रूबी का उपयोग करना
currentDate = DateTime.now
start_date = "2017-03-31"
end_date = "2018-03-31"
currentDate.between?(start_date, end_date)
**Out Put Will be** true or false
सारांश
d1 = DateTime.parse('2018/04/01')
d2 = DateTime.parse('2018/04/29')
outside = DateTime.parse('2018/04/30')
inside = DateTime.parse('2018/04/15')
# include?
(d1...d2).include?(d1) # true
(d1...d2).include?(d2) # false
(d1...d2).include?(outside) # false
(d1...d2).include?(inside) # true
(d1..d2).include?(d1) # true
(d1..d2).include?(d2) # true
(d1..d2).include?(outside) # false
(d1..d2).include?(inside) # true
# ===
(d1...d2) === d1 # true
(d1...d2) === d2 # false
(d1...d2) === outside # false
(d1...d2) === inside # true
(d1..d2) === d1 # true
(d1..d2) === d2 # true
(d1..d2) === outside # false
(d1..d2) === inside # true
# cover?
(d1...d2).cover?(d1) # true
(d1...d2).cover?(d2) # false
(d1...d2).cover?(outside) # false
(d1...d2).cover?(inside) # true
(d1..d2).cover?(d1) # true
(d1..d2).cover?(d2) # true
(d1..d2).cover?(outside) # false
(d1..d2).cover?(inside) # true
# between?
d1.between?(d1, d2) # true
d2.between?(d1, d2) # true
outside.between?(d1, d2) # false
inside.between?(d1, d2) # true