2012-10-26 192 views

回答

1

假設你有: 時間t和間隔[a-b] [c-d],如果他們進行排序,如:

  • 一個< d
  • 一個< b
  • Ç< d

然後你可以檢查t是內部b和c,並且檢查是否b> C,則整個事情是真的,否則 - 不。 作爲一個快速的視線,我還沒有想到更好的東西,然後全面檢查他們是否沒有排序。

1

你的問題可以改寫這個樣子。

檢查兩個日期c1和c2中的任何日期是否在兩個日期d1和d2之間。

// assuming d1 is before d2 
BOOL intersects = 
    ([d1 compare:c1] == NSOrderedAscending && 
    [d2 compare:c1] == NSOrderedDescending) 
    || 
    ([d1 compare:c2] == NSOrderedAscending && 
    [d2 compare:c2] == NSOrderedDescending) 
    || [d1 compare:c1] == NSOrderedEqual 
    || [d1 compare:c2] == NSOrderedEqual 
    || [d2 compare:c1] == NSOrderedEqual 
    || [d2 compare:c2] == NSOrderedEqual; 

編輯:可替代地,

NSTimeInterval i = [d2 timeIntervalSinceDate:d1]; 
NSTimeInterval c1i = [c1 timeIntervalSinceDate:d1]; 
NSTimeInterval c2i = [c2 timeIntervalSinceDate:d1]; 
BOOL intersects = (c1i >= 0 && c1i <= i) || (c2i >= 0 && c2i <= i); 
1

兩個間隔[a, b][c, d]具有如果

a <= d && c <= b 
因此

可以檢查一個非空交集

[a compare:d] <= 0 && [c compare:b] <= 0 

,看看間隔有任何共同的價值。

(這裏我假設間隔有序,即a <= bc <= d

1

什麼是檢查是否隨時隨地日期間的2 交叉等之間的任意2個日期沒有一種有效的方法必須檢查日期之間的每個 秒,並檢查第二個是否在 其他兩個日期之間?

你這樣做的另一種方式。第一個間隔何時與第二個間隔不相交?

  • 當END1 < START2(第二開始之前所述第一時間間隔結束)
  • 當START1> END2(第二已結束之後的第一時間間隔開始)。

所以,你要

End1 < Start2 OR Start1 > End2 // Condition of non-intersection 

是假的:即你想

End1 >= Start2 AND Start1 <= End2 // Negation of above 

爲true。