Использование фильтра работает для меня в C #.
string s = "searchTerm";
var filter = Builders<Model>.Filter.Where(p => p.Title.ToLower().Contains(s.ToLower()));
var listSorted = collection.Find(filter).ToList();
var list = collection.Find(filter).ToList();
Он может даже использовать индекс, потому что я считаю, что методы вызывается после того, как произойдет возврат, но я еще не тестировал это.
Это также позволяет избежать проблемы
var filter = Builders<Model>.Filter.Eq(p => p.Title.ToLower(), s.ToLower());
, что mongodb будет думать, что p.Title.ToLower () является свойством и не будет правильно отображаться.
Я бы попробовал получить сегодняшнюю дату, нормализованную к полуночи, и вторую дату, нормализованную к полуночи, затем сравнить, одинаковая ли это NSDate.
Из примера Apple вот как вы нормализуете к полуночи сегодняшнюю дату, делаете то же самое для второй даты и сравниваете:
NSCalendar * gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents * components =
[gregorian components:
(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit)
fromDate:[NSDate date]];
NSDate * today = [gregorian dateFromComponents:components];
Вы можете сравнить компоненты даты:
NSDateComponents *otherDay = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:aDate];
NSDateComponents *today = [[NSCalendar currentCalendar] components:NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay fromDate:[NSDate date]];
if([today day] == [otherDay day] &&
[today month] == [otherDay month] &&
[today year] == [otherDay year] &&
[today era] == [otherDay era]) {
//do stuff
}
Изменить:
Мне больше нравится метод Стефана, я думаю, что он делает более понятным и понятным оператор if:
NSCalendar *cal = [NSCalendar currentCalendar];
NSDateComponents *components = [cal components:(NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:[NSDate date]];
NSDate *today = [cal dateFromComponents:components];
components = [cal components:(NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay) fromDate:aDate];
NSDate *otherDate = [cal dateFromComponents:components];
if([today isEqualToDate:otherDate]) {
//do stuff
}
Крис, я учел ваше предложение. Мне пришлось посмотреть, что это за эпоха, поэтому для всех, кто не знает, проводится различие между BC и AD. Для большинства людей в этом, вероятно, нет необходимости, но это легко проверить и добавить определенности, поэтому я включил это. Если вы стремитесь к скорости, это, вероятно, в любом случае не лучший метод.
ПРИМЕЧАНИЕ , как и многие ответы на SO, через 7 лет это полностью устарело. В Swift теперь просто используйте .isDateInToday
Вы также можете проверить временной интервал между имеющейся у вас датой и текущей датой:
[myDate timeIntervalSinceNow]
Это даст вам временной интервал в секундах между myDate и текущей датой / временем.
Ссылка .
Edit: Примечание для всех: мне хорошо известно, что [myDate timeIntervalSinceNow] не определяет однозначно, является ли myDate сегодняшним днем.
Я оставляю этот ответ как есть, так что если кто-то ищет что-то похожее и [myDate timeIntervalSinceNow] полезно, они могут найти его здесь.
Возможно, это можно переделать под категорию NSDate, но я использовал:
// Seconds per day (24h * 60m * 60s)
#define kSecondsPerDay 86400.0f
+ (BOOL) dateIsToday:(NSDate*)dateToCheck
{
// Split today into components
NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents* comps = [gregorian components:(NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit|NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit)
fromDate:[NSDate date]];
// Set to this morning 00:00:00
[comps setHour:0];
[comps setMinute:0];
[comps setSecond:0];
NSDate* theMidnightHour = [gregorian dateFromComponents:comps];
[gregorian release];
// Get time difference (in seconds) between date and then
NSTimeInterval diff = [dateToCheck timeIntervalSinceDate:theMidnightHour];
return ( diff>=0.0f && diff<kSecondsPerDay );
}
(Однако сравнение двух строк дат, как в исходном вопросе, кажется "чище"...)