2015-01-23 4 views
-2

У меня есть основные данные с событиями и календарем, мне нужно построить запрос предиката, чтобы получить только событие, которое выпадает сегодня. Например:Проверьте, соответствует ли временной интервал сегодня

СОБЫТИЯ (в таблице основных данных, это два атрибута с типом Date)

1) Start 10/01/2015 14:00:00 Ends 10/01/2015 16:00:00 
2) Start 10/01/2015 14:00:00 Ends 11/01/2015 19:00:00 
3) Start 09/01/2015 12:00:00 Ends 12/01/2015 16:00:00 
4) Start 09/01/2015 12:00:00 Ends 09/01/2015 16:00:00 

СЕГОДНЯ ЯВЛЯЕТСЯ

10/01/2015 

мне нужно просьбу вернуть 3 события (# 1-2 -3) и исключить № 4 как:

1) Is Starting today and Ends today 
2) Starts today and Ends tomorrow (so it is running today as well) 
3) Started yesterday and Ends after tomorrow (so it is running today as well) 
4) Is not running today 

Итак, вопрос в том, что является лучшим способом сделать это? И, возможно, кто-то может хотя бы дать понять, как определить сегодняшнюю отметку времени и дату окончания (10/01/2015 00:00:00 и 10/01/2015 24:00:00, если я прав?)

+0

Итак, у вас есть начальная и конечная дата в одной строке? –

+0

@ ClausBönnhoff: Нет-нет) У меня есть два атрибута с типом Date in Core Date table ... –

+1

Так в чем проблема, чтобы получить только данные, которые начинаются с сегодня? Или я понимаю что-то не так? –

ответ

1

Хорошо, я думаю, что ваша главная проблема заключается в том, как получить границы дня (то есть NSDate экземпляр, представляющий 0: 00h определенной даты). Это на самом деле довольно легко:

NSDate *startOfDay; 
[[NSCalendar currentCalendar] rangeOfUnit:NSCalendarUnitDay 
           startDate:&startOfDay 
           interval:NULL 
            forDate:yourDate]; 

Учитывая любую дату (yourDate), startOfDay будет в тот же день, но при 0: 00h.

С этой информацией он должен быть достаточно прост в построении строки предиката. Условие должно быть примерно таким:

event.startDate <= endOfDay AND event.endDate >= startOfDay 
+0

Спасибо, Даниэль, на самом деле мне удалось получить DateStart и DateEnd timestamps (но ваш путь намного лучше и будет использовать его), но главный вопрос - построить запрос прогноза ... не могу понять, как это сделать, и это похоже, что это сложный вопрос ... –

+0

Кажется, что-то вроде: if (eventStart> = dayStart и eventStart <= dayEnd) ИЛИ (eventEnd> = dayStart) ИЛИ (eventStart <= dayStart и eventEnd> = dayEnd) OR (eventStart> = dayStart) –

+1

Не должно быть простого 'event.startDate <= endOfDay AND event.endDate> = startOfDay' работает? Или я чего-то не хватает? –

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