2015-09-25 39 views
2

我正试图在swift中搜索两个日期之间的记录。 我存储如下图所示日期:使用核心数据在两个日期之间提取记录ios swift

 let date = NSDate() 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy'-'MM'-'dd HH':'mm':'ss" 

    println(date) // prints 2015-09-26 05:22:41 +0000 

    myreport.setValue(date, forKey: "date") 

而下面是我的代码使用来获取两个日期之间的记录NSPredicate:

let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd" 

    let startDate:NSDate = dateFormatter.dateFromString(fromdate)! 
    let endDate:NSDate = dateFormatter.dateFromString(todate)! 

    println(fromdate) // prints 2015-09-22 
    println(todate) // prints 2015-09-29 
    println(startDate) // prints 2015-09-21 20:00:00 +0000 
    println(endDate) // prints 2015-09-28 20:00:00 +0000 
    let predicate1 = NSPredicate(format: "%@ >= date AND %@ <= date", argumentArray: [startDate, endDate]) 

    let predicate = NSCompoundPredicate(type: NSCompoundPredicateType.OrPredicateType, subpredicates: [predicate1]) 
    // Set the predicate on the fetch request 
    request.predicate = predicate 
    request.sortDescriptors = [NSSortDescriptor(key: "report_id", ascending: false)] 
    var results : NSArray = context.executeFetchRequest(request, error: nil)! 

注:

1)我没有fromdate并在此格式是这种格式2015-09-25(as字符串)

2)我的日期属性的核心数据中的数据类型是NSDate

3)我能够存储并当我运行上面的代码林没有得到任何错误,但代码不被两个日期之间的搜索记录获取从核心数据成功

的日期。我的意思是我得到空结果数组。

任何一个PLZ可以告诉我什么即时做错在这里。 如果还需要更多信息,请通知我。提前致谢!

+0

我认为这可以帮助你http://stackoverflow.com/questions/15831600/core-data-predicate-date-comparison –

回答

5

最后经过多次修改和测试,这对我工作如下所示。如果你需要如何在coredata plz中存储nsdate,请检查上面的问题。

println(self.appdel.fromdate) // prints 2015-09-25 
    println(self.appdel.todate) // prints 2015-09-26 

    var fromdate = "\(self.appdel.fromdate) 00:00" // add hours and mins to fromdate 
    var todate = "\(self.appdel.todate) 23:59" // add hours and mins to todate 

    var context : NSManagedObjectContext = appdel.managedObjectContext! 
    var request = NSFetchRequest(entityName: "TblReportsP") 
    request.returnsObjectsAsFaults = false 
    let dateFormatter = NSDateFormatter() 
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm" 
    dateFormatter.timeZone = NSTimeZone(name: "GMT") // this line resolved me the issue of getting one day less than the selected date 
    let startDate:NSDate = dateFormatter.dateFromString(fromdate)! 
    let endDate:NSDate = dateFormatter.dateFromString(todate)! 
    request.predicate = NSPredicate(format: "(date >= %@) AND (date <= %@)", startDate, endDate) 

    request.sortDescriptors = [NSSortDescriptor(key: "report_id", ascending: false)] 
    var results : NSArray = context.executeFetchRequest(request, error: nil)! 

    println(results.count) 
0

我觉得你的谓语可能是错误的,尝试修改这样的: %@ <= date AND date <= %@

这样,你会看的date即开始和结束日期之间。

+0

我试过乌尔解决以上仍犯规作品。此外,我已编辑的问题,以添加一些打印语句,如何在我保存之前打印日期以及如何在搜索时使用日期。还有一件事是格式化日期在一天内减少。你可以在上面的打印语句中观察它。 – user3606682

相关问题