2013-04-14 3 views
0

Каков наилучший способ узнать, соответствует ли дата определенному диапазону дат? Я делаю это прямо сейчас:Проверьте, соответствует ли дата в диапазоне дат

if (([rangeStart compare:userEnteredDate] == NSOrderedAscending) && ([rangeEnd compare:userEnteredDate] == NSOrderedDescending) 

Единственная проблема с вышеуказанным кодом является то, что если дата RangeStart и userEnteredDate то же самое, если заявление будет давать «ложные» по какой-то причине, мне неизвестно. У кого-нибудь есть идеи, почему?

Есть ли лучший способ проверить, находится ли userEnteredDate в пределах диапазонаStart и rangeEnd?

ответ

0

Не знаю, если есть более прямой путь, но это нужно ПАКЕТ MATLAB.Основы

if (([rangeStart compare:userEnteredDate] == NSOrderedAscending || 
    [rangeStart compare:userEnteredDate] == NSOrderedSame) && 
    ([rangeEnd compare:userEnteredDate] == NSOrderedDescending || 
     [rangeEnd compare:userEnteredDate] == NSOrderedSame)) 
+0

Вы можете упростить, если учесть, что проверка того, что сравнение будет равным «NSOrderedAscending» или «NSOrderedSame», похоже на проверку того, что это не 'NSOrderedDescending'. Такая же концепция применяется и к другому сравнению. Более простой способ приведен в моем ответе ниже. –

+0

Мм, ты прав. Но разве сравнения не должны быть «[rangeStart compare: userEnteredDate]» и '[rangeStart compare: userEnteredDate]'? – ssantos

+0

Обратите внимание, что я перевернул Восхождение и Отклонение к вашему;) –

2

Причина заключается в том, что если rangeStart равно userEnteredDate, первый кусок вашего логического выражения будет вычисляться

NSOrderedSame == NSOrderedAscending 

, которая на самом деле ложь.

Я бы изменить порядок и использовать что-то вроде

if (([userEnteredDate compare:rangeStart] != NSOrderedDescending) 
    && ([userEnteredDate compare:rangeEnd] != NSOrderedAscending)) { 
    //... 
} 
+0

Я попробовал это, но это все еще не сработало. Спасибо, что ответили. –

+0

«не работает» не очень помогает. В чем проблема? –

+0

Проблема заключалась в том, что если userEnteredDate был таким же, как rangeStart, оператор if был ложным. Это, казалось, преобладало с вышеуказанным кодом. Ваш ответ был несколько полезен, потому что вы упоминали причину, почему он не работает. Итак, я отметил ваш ответ как полезный. –

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