Конечно всегда возвращает все данные , потому что вы игнорируете пользовательский запрос на выборку.
Замените
let allData = try viewContext.fetch(Login.fetchRequest())
на
let allData = try viewContext.fetch(fetchRequest)
Способ может быть упрощен
func callThisDay(startDate:Date, endDate:Date) -> [Login] {
let fetchRequest : NSFetchRequest<Login> = Login.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "date >= %@ AND date < %@", startDate as NSDate, endDate as NSDate)
do {
return try viewContext.fetch(fetchRequest)
} catch {
print(error)
return []
}
}