Skip to content

Instantly share code, notes, and snippets.

@mattantonelli
Last active July 24, 2020 14:57
Show Gist options
  • Select an option

  • Save mattantonelli/577bfae6db71cc2472e2c20201b87611 to your computer and use it in GitHub Desktop.

Select an option

Save mattantonelli/577bfae6db71cc2472e2c20201b87611 to your computer and use it in GitHub Desktop.
Check for overlapping datetime ranges + proof
#!/usr/bin/env ruby
require 'time'
require 'active_support'
require 'active_support/core_ext'
def overlap?(search_start, search_end, alert_start, alert_end)
puts '---'
puts "Search Range: #{search_start} - #{search_end}"
puts "Alert Range: #{alert_start} - #{alert_end}"
search_start <= alert_end && search_end >= alert_start
end
puts 'Search overlaps alert at the beginning (true)'
search_start = Time.now - 1.day
search_end = Time.now + 1.day
alert_start = Time.now
alert_end = Time.now + 2.days
puts overlap?(search_start, search_end, alert_start, alert_end)
puts "\nSearch overlaps alert at the end (true)"
search_start = Time.now + 1.day
search_end = Time.now + 3.days
alert_start = Time.now
alert_end = Time.now + 2.days
puts overlap?(search_start, search_end, alert_start, alert_end)
puts "\nSearch completely surrounds alert (true)"
search_start = Time.now
search_end = Time.now + 3.days
alert_start = Time.now + 1.day
alert_end = Time.now + 2.days
puts overlap?(search_start, search_end, alert_start, alert_end)
puts "\nAlert completely surrounds search (true)"
search_start = Time.now
search_end = Time.now + 1.day
alert_start = Time.now - 1.day
alert_end = Time.now + 2.days
puts overlap?(search_start, search_end, alert_start, alert_end)
puts "\nSearch is before alert (false)"
search_start = Time.now - 1.day
search_end = Time.now
alert_start = Time.now + 1.day
alert_end = Time.now + 2.days
puts overlap?(search_start, search_end, alert_start, alert_end)
puts "\nSearch is after alert (false)"
search_start = Time.now + 2.days
search_end = Time.now + 3.days
alert_start = Time.now
alert_end = Time.now + 1.day
puts overlap?(search_start, search_end, alert_start, alert_end)
@mattantonelli
Copy link
Copy Markdown
Author

Search overlaps alert at the beginning (true)
---
Search Range: 2020-07-23 14:53:19 +0000 - 2020-07-25 14:53:19 +0000
Alert Range:  2020-07-24 14:53:19 +0000 - 2020-07-26 14:53:19 +0000
true

Search overlaps alert at the end (true)
---
Search Range: 2020-07-25 14:53:19 +0000 - 2020-07-27 14:53:19 +0000
Alert Range:  2020-07-24 14:53:19 +0000 - 2020-07-26 14:53:19 +0000
true

Search completely surrounds alert (true)
---
Search Range: 2020-07-24 14:53:19 +0000 - 2020-07-27 14:53:19 +0000
Alert Range:  2020-07-25 14:53:19 +0000 - 2020-07-26 14:53:19 +0000
true

Alert completely surrounds search (true)
---
Search Range: 2020-07-24 14:53:19 +0000 - 2020-07-25 14:53:19 +0000
Alert Range:  2020-07-23 14:53:19 +0000 - 2020-07-26 14:53:19 +0000
true

Search is before alert (false)
---
Search Range: 2020-07-23 14:53:19 +0000 - 2020-07-24 14:53:19 +0000
Alert Range:  2020-07-25 14:53:19 +0000 - 2020-07-26 14:53:19 +0000
false

Search is after alert (false)
---
Search Range: 2020-07-26 14:53:19 +0000 - 2020-07-27 14:53:19 +0000
Alert Range:  2020-07-24 14:53:19 +0000 - 2020-07-25 14:53:19 +0000
false

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment