I have arrData of dictionary, I want to filter based on PERSON_ID, p_punchTime(string dd-MM-yyyy HH:mm:ss) using prevDate and currDate in NSPredicate
"aarData": [
{
"PERSON_ID": 100000000530788,
"p_comments": "",
"p_person": " Amal Abutaleb",
"p_personId": "100000000530788",
"p_punchTime": "25-08-2020 10:32:53",
"p_punchType": IN,
},
{
"PERSON_ID": 100000000530788,
"p_comments": "",
"p_person": " Amal Abutaleb",
"p_personId": "100000000530788",
"p_punchTime": "25-08-2020 10:32:59",
"p_punchType": OUT,
}
]
How to use Date Object/string (to dd-MM-yyyy HH:mm:ss) for using it in NSPredicate in Swift.
when I pass strCurrdate and strPrevdate in NSPredicate works but filter returns all aarData, so Does string Date in NSPredicate do not work in the filter?
My Code:
let formatter = DateFormatter()
formatter.dateFormat = "dd-MM-yyyy HH:mm:ss"
let strCurrdate = formatter.string(from: (NHNetworkClock.shared()?.networkTime)! as Date )
let currdateObj = formatter.date(from: strCurrdate)! as NSDate
print("currdateObj : \(currdateObj)") //prints 2020-08-24 13:54:03 +0000 ,need dd-MM-yyyy HH:mm:ss
var dayComponent = DateComponents()
dayComponent.day = -1 // For removing one day (yesterday): -1
let theCalendar = Calendar.current
let prevDate = theCalendar.date(byAdding: dayComponent, to:(NHNetworkClock.shared()?.networkTime)! as Date)
print("prevDate : \(prevDate)")
let strPrevdate = formatter.string(from: prevDate!) //gives string dd-MM-yyyy HH:mm:ss
let prevDateObj = formatter.date(from: strPrevdate)! as NSDate
print("prevDateObj : \(prevDateObj)") //prints 2020-08-24 13:54:03 +0000, need dd-MM-yyyy HH:mm:ss
let resultPredicate = NSPredicate(format: "PERSON_ID CONTAINS %@ AND ( p_punchTime >= %@ AND p_punchTime <= %@)", NSString.init(format: "%@",Constants().EMPLOYEE_ID() as String),prevDateObj! as NSDate,currdateObj! as NSDate)
filteredArr = arrData.filtered(using: predicate) as NSArray
//NOTE: aarData contains p_punchTime in format string dd-MM-yyyy HH:mm:ss
log
(lldb) po resultPredicate
PERSON_ID CONTAINS "100000000530788" AND p_punchTime >= CAST(619860816.000000, "NSDate") AND p_punchTime <= CAST(619947216.000000, "NSDate")
I'm getting this error
libc++abi.dylib: terminating with uncaught exception of type NSException
Any lead on this