我需要根据昨天添加的值过滤搜索结果。我昨天看到很多使用:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:( NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit ) fromDate:[[NSDate alloc] init]];
[components setHour:-24];
[components setMinute:0];
[components setSecond:0];
NSDate *yesterday = [cal dateByAddingComponents:components toDate:[NSDate date] options:0];
predicate = [NSPredicate predicateWithFormat:@"created_at >= %@", yesterday];
但是从这个确切的时刻开始,这发现了24小时。我需要在昨天上午12:01到晚上12点过滤。那就是昨天的实际24小时。
我猜我需要做一些事情: 1.取当前日期 2.查找从当前日期到当天上午12:01的时间 3.然后从该日期开始减去24小时
我有信心我可以做#3(当然还有#1),但我不知道如何去做#2。我可能过度思考但我似乎无法理解如何说:“好吧,现在是早上8点03分,我需要删除8小时2分钟,这将使我在上午12:01”。
答案 0 :(得分:2)
从今天的某个日期开始,例如“now”:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDate *now = [NSDate date];
减去一天以获得昨天的日期:
NSDateComponents *minusOneDay = [[NSDateComponents alloc] init];
[oneDay setDay:-1];
NSDate *nowMinusOneDay = [cal dateByAddingComponents:minusOneDay toDate:now options:0];
计算包含昨天日期的“日历单位”的开始和结束日期:
NSDate *startOfYesterday;
NSTimeInterval lengthOfYesterday;
[cal rangeOfUnit:NSDayCalendarUnit startDate:&startOfYesterday interval:&lengthOfYesterday forDate:nowMinusOneDay];
NSDate *endOfYesterday = [startOfYesterday dateByAddingTimeInterval:lengthOfYesterday];
即使在今天和昨天之间发生夏令时转换,这也应该有效。
一般情况下,应避免使用明确的时间间隔,例如“24小时”,因为不是每天都有这样的长度。