H. 私はAgendadateというエンティティとAgendaEventというエンティティを持っています。 AgendaEventには、AgendaDate(agendaDates)との多対多の関係があります。Swift coreData - フォーマット日付とそれを述語で使用
私のAgendaDateにはオブジェクト日付(Date型)があります。
私はそうのような述語を使用しています:MM:YYYY MMはHHをddを代わりに」の
"DD MMのYYYY":
fetchRequest.predicate = NSPredicate(format: "ANY agendaDates.dates == %@", date as CVarArg)
私は形式にしようとしているが、これを持っている日付ss "
述語で2つの日付を比較する必要がありますが、時間はありませんか? それは可能ですか?
UPDATEあなたが示唆したよう----- がここに私の機能が更新されています:
func agendaEventsWithDate(date: Date) -> NSFetchRequest<AgendaEvent>
{
// create a fetch request that will retrieve all the AgendaEvents.
let fetchRequest = NSFetchRequest<AgendaEvent>(entityName: "AgendaEvent")
// set the predicate to only keep AgendaEvents where the related AgendaDate's date matches the passed in date.
let cal = Calendar.current
let startOfDay = cal.startOfDay(for: eventDate)
let endOfDay = cal.date(byAdding: .day, value: 1, to: startOfDay)!
print(startOfDay)
print(endOfDay)
// fetchRequest.predicate = NSPredicate(format: "ANY agendaDates.agendaDates == %@", date as CVarArg)
fetchRequest.predicate = NSPredicate(format: "SUBQUERY(agendaDates, $a, $a.dates >= %@ AND $a.dates < %@)[email protected] > 0",
startOfDay as NSDate, endOfDay as NSDate)
return fetchRequest
}
、ここでは、セルを構成し、選択した日付の同じ日付を持っているだけで、イベントを取るべき機能です:
func configuringCell(cell: CalendarAgendaCell, indexPath: IndexPath) {
for dates in calendar.selectedDates {
for dateOfEvent in myEventDate {
formatter.dateFormat = "dd MM yyyy"
let dateToCompare = formatter.string(from: dates)
formatter.dateFormat = "dd-MM-yyyy"
let comparingDate = formatter.date(from: dateToCompare)!
if dateOfEvent == dateToCompare {
myTempEvents = try! context.fetch(agendaEventsWithDate(date: comparingDate))
let myEvent = myTempEvents[indexPath.row]
cell.configureCell(agendaEvent: myEvent)
} else {
// the array is empty
}
}
}
}
コアデータの日付にhh:mm:ssがあり、述語で比較しながら削除したいとお考えですか? –
@SandeepBhandariはい正確です。コアデータには時間とともに格納されます。私はそれを比較する述語でそれを使用するときには、時間がなくても日付が欲しいです – Marco
@SandeepBhandari :)ありがとう! – Marco