So, I put NSDate in Realm model:
class GeneralList: Object {
dynamic var createdAt = NSDate()
dynamic var notes = ""
}
How to get, for example, all 'notes' in 27.03.2016 ?
bcamur
You can implement this function, from Rafael's answer
private func createMessageRealmModelFromIncomingMessage(incomingMessage: MessageRestModel) -> MessageRealmModel {
let messageRealmModel = MessageRealmModel()
messageRealmModel.id = incomingMessage.id!
messageRealmModel.messageType = "CHAT_MESSAGE"
messageRealmModel.value = (incomingMessage.content?.value)!
messageRealmModel.senderId = incomingMessage.senderId!
messageRealmModel.recipientId = incomingMessage.recipientId!
messageRealmModel.sendDate = incomingMessage.sendDate!
messageRealmModel.serverDeliveryDate = incomingMessage.serverDeliveryDate!
messageRealmModel.receiverDeliveryDate = NSDate().msFromEpoch()
return messageRealmModel
}
And then use it as a parameter for Realm's filter function like this:
var c = NSDateComponents()
c.year = 2016
c.month = 3
c.day = 27
var date = NSCalendar(identifier: NSCalendarIdentifierGregorian)?.dateFromComponents(c)
let generalListsInDay = realm.objects(GeneralList).filter(self.predicateForDayFromDate(day))
After executing this code your generalListsInDay should contain all GeneralList's in 27.03.2016
So, I find easy way:
Create public extension for String and create function with separate NSDate:
public static func sepaDate(whatNeed: String) -> String { var currentDate = NSDate() let calendar = NSCalendar(calendarIdentifier: NSCalendarIdentifierGregorian) let dateComponents = calendar!.components([.Day, .Month, .Year, .Minute, .Hour], fromDate: currentDate) var forReturn: String = "0" switch whatNeed { case "day": let valu = String(dateComponents.day) forReturn = valu case "month": let valu = String(dateComponents.month) forReturn = valu case "year": let valu = String(dateComponents.year) forReturn = valu case "hour": let valu = String(dateComponents.hour) forReturn = valu case "minute": let valu = String(dateComponents.minute) forReturn = valu default: print("Error") } return forReturn } }In Realm class, create separate date:
dynamic var minute = String.sepaDate("minute") dynamic var hour = String.sepaDate("hour") dynamic var day = String.sepaDate("day") dynamic var month = String.sepaDate("month") dynamic var year = String.sepaDate("year")In ViewController call to predicate
let dayday = String(dateComponents.day) let monthmonth = String(dateComponents.month) let yearyear = String(dateComponents.year) let predicate = NSPredicate(format: "day = %@ AND month = %@ AND year = %@", dayday, monthmonth, yearyear) generalRecords = uiRealm.objects(GeneralList).filter(predicate)
I hope it's help somebody...
来源:https://stackoverflow.com/questions/35934243/filter-by-day-from-nsdate-in-realm-swift