加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift – 核心数据谓词按今天的日期过滤

发布时间:2020-12-14 05:23:24 所属栏目:百科 来源:网络整理
导读:我有这方面的问题,我没有找到一个正确的答案所以我会在这里留下一个小教程. 目标是在今天的日期过滤提取的对象. 注意:它与Swift 3兼容. 您不能简单地使用您的日期与今天的日期进行比较: let today = Date()let datePredicate = NSPredicate(format: "%K ==
我有这方面的问题,我没有找到一个正确的答案所以我会在这里留下一个小教程.

目标是在今天的日期过滤提取的对象.

注意:它与Swift 3兼容.

您不能简单地使用您的日期与今天的日期进行比较:
let today = Date()
let datePredicate = NSPredicate(format: "%K == %@",#keyPath(ModelType.date),today)

它不会显示任何内容,因为您的日期不太可能是完全比较日期(它还包括秒和毫秒)

解决方案是这样的:

// Get the current calendar with local time zone
var calendar = Calendar.current
calendar.timeZone = NSTimeZone.local

// Get today's beginning & end
let dateFrom = calendar.startOfDay(for: Date()) // eg. 2016-10-10 00:00:00
let dateTo = calendar.date(byAdding: .day,value: 1,to: dateFrom)
// Note: Times are printed in UTC. Depending on where you live it won't print 00:00:00 but it will work with UTC times which can be converted to local time

// Set predicate as date being today's date
let fromPredicate = NSPredicate(format: "%@ >= %@",date as NSDate,dateFrom as NSDate)
let toPredicate = NSPredicate(format: "%@ < %@",dateTo as NSDate)
let datePredicate = NSCompoundPredicate(andPredicateWithSubpredicates: [fromPredicate,toPredicate])
fetchRequest.predicate = datePredicate

这是迄今为止最简单的&只显示具有今天日期的对象的最短方式.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读