2013-07-12 2 views
0

Мне нужно отфильтровать результаты поиска на основе значений, которые были добавлены вчера. Я видел много на вчерашнем использовании:NSDate-интервалы за вчерашний день

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 am-12:00pm. Итак, фактический 24-часовой период, который был вчера.

Я предполагаю, что мне нужно сделать что-то вдоль линий: 1. Возьмите текущую дату 2. Найдите время от текущей даты до 12:01 часов того же дня 3. Затем вычитаем 24 часов с этой даты

Я уверен, что могу делать # 3 (и # 1, конечно), но я не уверен, как идти о # 2. Я, может быть, подумал об этом, но я не могу понять, как сказать: «Хорошо, это 8:03 утра, мне нужно удалить 8 часов и 2 минуты, что поместит меня в 12:01».

ответ

2

Начните с некоторой даты сегодня, например, «сейчас»:

NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDate *now = [NSDate date]; 

Subtract один день, чтобы получить дату вчера:

NSDateComponents *minusOneDay = [[NSDateComponents alloc] init]; 
[oneDay setDay:-1]; 
NSDate *nowMinusOneDay = [cal dateByAddingComponents:minusOneDay toDate:now options:0]; 

Compute даты начала и окончания «дня календарный блок ", который содержит вчерашнюю дату:

NSDate *startOfYesterday; 
NSTimeInterval lengthOfYesterday; 
[cal rangeOfUnit:NSDayCalendarUnit startDate:&startOfYesterday interval:&lengthOfYesterday forDate:nowMinusOneDay]; 
NSDate *endOfYesterday = [startOfYesterday dateByAddingTimeInterval:lengthOfYesterday]; 

Это должно работать, даже если летнее время переход происходит сегодня и вчера.

Как правило, следует избегать использования явных временных интервалов, таких как «24 часа», поскольку не каждый день имеет такую ​​длину.

+0

Я вижу, я думаю, что основываясь на 24-часовом цикле, время от времени возилось. Большое спасибо за помощь! – random

+0

@ random: Добро пожаловать! –

Смежные вопросы