所以我的日期范围可能类似于((Date.today - 90)..Date.today)
,我想查看(Date.today - 90)
是否在另一个日期范围的第一个值之后,Date.today
是否在之前日期范围内的最终值。我已尝试过以下
((Date.parse('25-12-2000')..(Date.parse('25-12-2020')).include?((Date.today - 90)..Date.today)
返回false。如果我将include?
替换为member?
或cover?
我如何让它返回真实?语法改变还是我需要在Ruby中使用不同的方法?
答案 0 :(得分:4)
您可以使用cover?
检查日期范围是否包含两个值:
range = Date.new(2000, 12, 25)..Date.new(2020, 12, 25)
range.cover?(Date.today - 90) && range.cover?(Date.today)
#=> true
range = Date.new(2000, 12, 25)..Date.new(2020, 12, 25)
other = (Date.today - 90)..Date.today
range.cover?(other.begin) && range.cover?(other.end)
#=> true
答案 1 :(得分:1)
我只是检查范围的第一个和最后一个日期:
range = (Date.today - 90)..Date.today)
validation_range = ((Date.parse('25-12-2000')..(Date.parse('25-12-2020'))
range.first > validation_range && range.last < validation_range.last
你可以进一步分解,而不仅仅是每个的第一个和最后一个日期:
start_date = (Date.today - 90)
end_date = Date.today
start_validation = Date.parse('25-12-2000')
end_validation = Date.parse('25-12-2020')
start_date > start_validation && end_date < end_validation
我不确定命名的理想情况,如果你愿意,可以将其减少到一行,但希望这可以用于说明目的。此外,您可能希望使用>=
和<=
,但我不确定日期是否包含在内。
这可以避免任何潜在的昂贵循环。
希望有所帮助 - 让我知道你是怎么过的,或者你有什么问题!
答案 2 :(得分:1)
如果您有两个范围A = (a..b)
和B = (y..z)
,并且想知道B
是否完全涵盖了A
,那么您可以询问:
a <= y && z <= b
无需预先构建范围。