日期选择器文本字段中的核心日期日期比较

时间:2017-04-03 13:26:26

标签: ios swift core-data

我正在使用模型中的日期类型成功地在Core数据中保存日期。日期以2017-04-02 14:56:41的格式保存。当我后退时,我想用当前日期文本字段过滤日期,其格式类似于2017年4月2日。我使用谓词来比较两个日期,但是应用程序由于差异而崩溃,或者可能是当前日期是字符串。

let predicate = NSPredicate(format: "(dateSchedule >= %@ )", fromTextField.text!)

核心数据日期:2017-04-02 14:56:41 currentdate textfield date:2017年4月2日

任何帮助?

2 个答案:

答案 0 :(得分:0)

我假设 dateSchedule 是coredata中的日期

您可以在日期变量上转换文本(确保格式正确)

let dateString = "2017-04-02 14:56:41"
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd hh:mm:ss"

let dateObj = dateFormatter.date(from: dateString)

然后创建谓词:

let predicate = NSPredicate(format: "(dateSchedule >= %@ )", dateObj)

编辑:

如果日期时间令您烦恼,您可以使用这样的实用程序:

https://github.com/erica/SwiftDates

所以你可以过滤:

let predicate = NSPredicate(format: "(dateSchedule >= %@ )", dateObj.startOfDay)

通过这种方式,您将删除时间部分并在当天开始时进行过滤

答案 1 :(得分:0)

我会用这种方式格式化日期:

let dateFormatter = Dateformatter()
dateFormatter.timeStyle = .none
dateFormatter.dateStyle = .medium

您可以将此应用于某个日期,并将其作为字符串形式:

 whatever you are saving it as = dateFormatter.string(from: Date())

然后你会得到这样的日期," 2017年3月17日"。

这种使用日期格式化程序的方式在您的情况下非常实用。

当你拿到时,你只需要这样做:

 let predicate = NSPredicate(format: "(dateSchedule >= %@ )", fromTextField.text!)

但我建议你改用UIDatePickerView:

 let predicate = NSPredicate(format: "(dateSchedule >= %@ ), dateFormatter.string(from: datePickerView.date)")