重なっているかどうかを判別するコード
というわけで、簡単な比較で判断できることはわかったので、あとは日付の比較をどうするか?だけ。
NSDate には 2つの日付を比較するメソッドがあったりするけど、返ってくる値が NSDate だったり昇順、降順、同じの値だったりするので、今回はせっかく簡単な数式で判断できるのだから、数字で確認しよう!と思って以下のようなコードに。
NSTimeInterval start = [schedule.start timeIntervalSinceReferenceDate]; NSTimeInterval end = [schedule.end timeIntervalSinceReferenceDate]; NSTimeInterval newStart = [newSchedule.start timeIntervalSinceReferenceDate]; NSTimeInterval newEnd = [newSchedule.end timeIntervalSinceReferenceDate]; if (start<=newEnd && end>=newStart) { return YES; }
timeIntervalSinceReferenceDate を使って4つの日付を数字にしてから比較式に入れて確認をしてみた。
schedule と newSchedule の期間が重なっていたら YES を返す。
あ、日付での比較なので、NSDate は 0:00 で合わせるとかして「時間」を全部同じにしておかないと、同じ日付なのに時間が重ならないってことも起きるので注意。