2013-10-02 123 views
0

我有一個具有兩個日期屬性(date1和date2)的Core Data模型,並且想要獲取具有date2 - date1> x天的所有對象。我已經嘗試過:如何使用日期差異過濾大於x天的NSPredicate

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"MyEntity"]; 
fetchRequest.predicate = [NSPredicate predicateWithFormat:@"date1 != nil AND date2 != nil AND date2 - date1 > %d", x*86400]; 

我的NSDate的理解是,這僅僅是圍繞着Unix時間戳的包裝和核心數據通過內部比較時間戳兩個日期進行比較。有一天有86400秒,所以上面的謂詞對我來說總是有意義的,但不知怎的,它也會返回具有小於x天差異的對象。

我在做什麼錯?

+1

「一天有86400秒」這是不正確的。有幾秒鐘的時間(夏令時節省)和不同日曆的日曆時間不同。查看有關日期和時間管理的WWDC 2013會話。 –

+0

你是對的,但是這個應用只會在一個國家的受控環境中使用,所以這不會導致意外的行爲。 – knukko

+0

date1和date2的順序是否重要?他們總是按照相同的順序嗎? –

回答

1

爲什麼不把作爲單獨的字段存儲日期差異

它將比任何實時計算都快得多。你可以在date的制定者中做到這一點。

+0

這將是首選的解決方案,但天數可以由用戶編輯。這會導致更新每個對象以重新計算新的日期差異。 – knukko

+0

這是我可能會採用的解決方案,但出於完全不同的原因。 date2-date1很可能反映了OP數據類型中的一些真實數據。也許這是一個事件的持續時間,假期的天數或其他一些你可以給的名字。如果是「numberOfDays> 7」或「myEntity.numberOfDays;」 –

+0

@mr,則謂詞和其他相關代碼將更清晰。莫,那又怎麼樣?您定義了整數'dateDifferenceInDays',用戶輸入'targetNumberOfDays',並將一個謂詞'dateDifferenceInDays> targetNumbersOfDays'提供給核心數據。數據庫已經被優化到死亡,以處理這些類型的謂詞。 –