2017-04-03 91 views
0

我正在使用模型中的日期類型成功地在覈心數據中保存日期。日期以格式保存,如2017-04-02 14:56:41。當我retreive我想過濾日期與當前日期文本字段有格式如2017年4月2日。我使用謂詞來比較兩個日期,但應用程序由於差異墜毀或可能是當前日期是字符串。核心從日期選擇器文本字段的日期日期比較

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

核心數據日期:2017年4月2日14時56分41秒 的currentdate文本字段日期:2017年

4月2日任何幫助嗎?

回答

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) 

這樣一來,你要刪除的部分時間和過濾的一天的開始

+0

我有自己的想法有關日期刺痛的轉換到日期格式,但問題是當我在coredata中保存日期它包含日期時間。當我獲取數據時,該日期時間不同,並且由於時間上的差異,謂詞實際上不起作用。 – Imran

+0

@Imran,我更新了我的答案,請試試 – carlos21

+0

謝謝@ carlos21尋求幫助。 – Imran

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)")