我有一个名为thoughtArray的数组,它是一个名为ThoughtObject的自定义对象的数组。 ThoughtObject有一个名为' createdDate'它包含NSDate,即创建对象的日期。
我需要过滤该数组并查找与当前日期匹配的所有对象,然后将它们附加到另一个数组。
到目前为止,所有尝试均未成功。这就是我在下面尝试过的。
for createdToday in thoughtArray {
if (createdToday.createdDate?.isEqualToDate(NSDate()) != nil) {
createdTodayArray.append(createdToday)
}
}
问题是,即使将具有设置为几天前的createdToday属性的对象添加到数组中。
非常感谢帮助。
答案 0 :(得分:0)
NSDate
对象表示特定时刻。因此,数组中的日期不太可能正好代表NOW。
有几种方法可以确定日期是否为今天。您可以将日期转换为NSDateComponents
并比较年,月和日。
答案 1 :(得分:0)
有两个问题。首先,“可选链接”
createdToday.createdDate?.isEqualToDate(NSDate()
是否返回nil
,具体取决于createdToday.createdDate
是nil
。那不是你想要的。
第二,正如@thelaws在答案中所说,isEqualToDate()
如果两个日期代表完全相同的时刻,则仅返回yes
。 NSCalendar
有一个
func compareDate(date1: NSDate, toDate date2: NSDate, toUnitGranularity unit: NSCalendarUnit) -> NSComparisonResult
方法(自iOS 8起可用),可在此处使用:
let cal = NSCalendar.currentCalendar()
let now = NSDate()
for createdToday in thoughtArray {
if let createdAt = createdToday.createdDate {
// compare with "day granularity":
if cal.compareDate(createdAt, toDate: now, toUnitGranularity: .CalendarUnitDay) == .OrderedSame {
createdTodayArray.append(createdToday)
}
}
}
答案 2 :(得分:0)
使用Martin提到的compareDate
函数和Array的过滤函数:
var thoughtArray = [ThoughtObject]()
var cal = NSCalendar.currentCalendar()
var createdToday = thoughtArray.filter {
if let createdDate = $0.createdDate {
return cal.compareDate(NSDate(), toDate: createdDate, toUnitGranularity: .CalendarUnitDay) == .OrderedSame
}
else {
return false;
}
}