Last active
July 24, 2020 14:57
-
-
Save mattantonelli/577bfae6db71cc2472e2c20201b87611 to your computer and use it in GitHub Desktop.
Check for overlapping datetime ranges + proof
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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) |
Author
mattantonelli
commented
Jul 24, 2020
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment