2013-04-14 5 views
0

Quel est le meilleur moyen de savoir si une date se situe dans une plage de dates donnée? Je fais ce moment:Vérifiez si une date se situe dans une plage de dates

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

Le seul problème avec le code ci-dessus est que si la date rangeStart et userEnteredDate sont les mêmes, l'instruction if céderais « false » pour une raison inconnue pour moi. Quelqu'un a des idées pourquoi?

Existe-t-il un meilleur moyen de vérifier si userEnteredDate est compris dans rangeStart et rangeEnd?

Répondre

0

Je ne sais pas s'il y a une voie à suivre plus directement, mais celui-ci devrait work.-

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

Vous pouvez simplifier si vous considérez que vérifier que la comparaison est égale à 'NSOrderedAscending' ou' NSOrderedSame' revient à vérifier que ce n'est pas 'NSOrderedDescending'. Le même concept s'applique à l'autre comparaison. Une manière plus directe est donnée dans ma réponse ci-dessous. –

+0

Mmh vous avez raison. Mais les comparaisons ne devraient-elles pas être '[rangeStart compare: userEnteredDate]' et '[rangeStart compare: userEnteredDate]'? – ssantos

+0

Notez que j'ai inversé Ascending et Desceding par rapport au vôtre;) –

2

La raison en est que si rangeStart est égal à userEnteredDate, la première partie de votre expression booléenne évaluera à

NSOrderedSame == NSOrderedAscending 

qui est effectivement faux.

je aimerais modifier l'ordre et d'utiliser quelque chose comme

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

J'ai essayé, mais ça n'a toujours pas marché. Merci d'avoir répondu. –

+0

"n'a pas fonctionné" n'aide pas beaucoup. Quel était le problème? –

+0

Le problème était que si la propriété userEnteredDate était identique à rangeStart, l'instruction if était fausse. Cela semblait prévaloir avec le code ci-dessus. Votre réponse a été quelque peu utile parce que vous avez mentionné la raison pour laquelle cela ne fonctionne pas. Donc, j'ai marqué votre réponse comme utile. –

Questions connexes