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

我有这方面的问题,我没有找到一个正确的答案所以我会在这里留下一个小教程.

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

注意:它与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

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

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...