2016-02-05 33 views
1

我有這樣的代碼中迅速:)錯誤與境界查詢中使用的NSDate()

lists = sharedAppCore.getRealm().objects(Event).filter("status = 1 OR status = 2").sorted("end_date", ascending: false) 

現在我想用起始日期的NSDate(過濾但這行不通:

lists = sharedAppCore.getRealm().objects(Event).filter("status = 1 OR status = 2 OR start_date >= \(NSDate())").sorted("end_date", ascending: false) 

什麼想法?

+0

也許相關:http://stackoverflow.com/questions/29095950/swift-filter-by-nsdate-object-property – Larme

回答

0

解決了這個代碼:

let predicate = NSPredicate(format: "end_date >= %@", NSDate()) 
lists = sharedAppCore.getRealm().objects(Event).filter("status = 1 OR status = 2").filter(predicate).sorted("end_date", ascending: false) 
+0

如果我想僅使用日期沒有時間,例如:NSPredicate(格式: 「DATE(end_date)> =%@」,NSDate())????? –

1
lists = sharedAppCore.getRealm() 
    .objects(Event) 
    .filter("status = 1 OR status = 2 OR start_date >= \(NSDate())") 
    .sorted("end_date", ascending: false) 

嚴格來說,上面的代碼是不一樣的你的最終代碼。

filter("status = 1 OR status = 2").filter(predicate).sorted("end_date", ascending: false) 

^因爲這個謂詞相同,如下所示:

filter("(status = 1 OR status = 2) AND end_date >= %@", NSDate()) 

如果創建斷言所有OR,你可以做到以下幾點:

filter("status = 1 OR status = 2 OR end_date >= %@", NSDate()) 

此外,如果你比較沒有幾小時,你應該從第一天起截斷小時。然後與截斷的日期進行比較。

類似如下:

let now = NSDate() 

let calendar = NSCalendar.currentCalendar() 
let component = calendar.components([.Year, .Month, .Day], fromDate: now) 

let today = calendar.dateFromComponents(component)! // truncated time 

然後使用截斷日期謂詞比較。

let now = NSDate() 

let calendar = NSCalendar.currentCalendar() 
let component = calendar.components([.Year, .Month, .Day], fromDate: now) 

let today = calendar.dateFromComponents(component)! // truncated time 

let lists = realm 
    .objects(Event) 
    .filter("status = 1 OR status = 2 OR end_date >= %@", today) 
    .sorted("end_date", ascending: false)