97 votes

iOS : comparer deux dates

J’ai un que je dois comparer avec deux autres et j’ai essayer avec et , mais si ma date est identique aux autres deux dates ?

Exemple : si j’ai un et deux autres qui sont un = et deux `` ce que je peux utiliser ?

210voto

Vincent Guerci Points 8619

Selon la documentation d'Apple d' NSDate compare:

Retourne un NSComparisonResult valeur qui indique l'ordre temporel du récepteur et l'autre date donnée.

- (NSComparisonResult)compare:(NSDate *)anotherDate

Les paramètres anotherDate

La date à laquelle comparer la le récepteur. Cette valeur ne doit pas être nul. Si la valeur est nulle, le comportement est pas défini et peut changer à l'avenir les versions de Mac OS X.

Valeur De Retour

Si:

Le récepteur et anotherDate sont exactement égale les unes des autres, NSOrderedSame

Le récepteur est plus tard dans le temps que anotherDate, NSOrderedDescending

Le récepteur est plus tôt dans le temps que anotherDate, NSOrderedAscending

En d'autres termes:

if ([date1 compare:date2] == NSOrderedSame) ...

Notez qu'il peut être plus facile dans votre cas particulier, à lire et à écrire ceci :

if ([date2 isEqualToDate:date2]) ...

Voir la Documentation d'Apple à ce sujet.

33voto

Yossi Tsafar Points 951

Après avoir cherché beaucoup stackoverflow et le web, j’ai appris à conclution qui est de la meilleure façon de le faire comme ceci :

Vous pouvez le changer à la différence entre les heures aussi.

Profitez !

23voto

Himadri Choudhury Points 5300

Je suppose que vous demandez ce que la valeur de retour est dans la fonction de comparaison.

Si les dates sont égales puis retour NSOrderedSame

Si l’ascendant (arg 2nd > 1er arg) retourner NSOrderedAscending

Si la descente (2e arg

16voto

Matthias Bauch Points 52145

Je ne sais pas exactement si vous avez posé cette question, mais si vous souhaitez uniquement comparer le composant de date d'un NSDate, vous devez utiliser NSCalendar et NSDateComponents pour supprimer le composant d'heure.

Quelque chose comme ça devrait fonctionner comme une catégorie pour NSDate:

 - (NSComparisonResult)compareDateOnly:(NSDate *)otherDate {
    NSUInteger dateFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit;
    NSCalendar *gregorianCalendar = [[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar] autorelease];
    NSDateComponents *selfComponents = [gregorianCalendar components:dateFlags fromDate:self];
    NSDate *selfDateOnly = [gregorianCalendar dateFromComponents:selfComponents];

    NSDateComponents *otherCompents = [gregorianCalendar components:dateFlags fromDate:otherDate];
    NSDate *otherDateOnly = [gregorianCalendar dateFromComponents:otherCompents];
    return [selfDateOnly compare:otherDateOnly];
}
 

2voto

JeremyP Points 46808

NSDate représente en fait un intervalle de temps en secondes depuis une date de référence (1er janvier 2000, je pense). En interne, un nombre à virgule flottante en double précision est utilisé. Il est donc très peu probable que deux dates arbitraires se comparent, même si elles se déroulent le même jour. Si vous voulez voir si une date particulière tombe un jour particulier, vous devrez probablement utiliser NSDateComponents . par exemple

 NSDateComponents* dateComponents = [[NSDateComponents alloc] init];
[dateComponents setYear: 2011];
[dateComponents setMonth: 5];
[dateComponents setDay: 24];
/*
 *  Construct two dates that bracket the day you are checking.  
 *  Use the user's current calendar.  I think this takes care of things like daylight saving time.
 */
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDate* startOfDate = [calendar dateFromComponents: dateComponents];
NSDateComponents* oneDay = [[NSDateComponents alloc] init];
[oneDay setDay: 1];
NSDate* endOfDate = [calendar dateByAddingComponents: oneDay toDate: startOfDate options: 0];
/*
 *  Compare the date with the start of the day and the end of the day.
 */
NSComparisonResult startCompare = [startOfDate compare: myDate];
NSComparisonResult endCompare = [endOfDate compare: myDate];

if (startCompare != NSOrderedDescending && endCompare == NSOrderedDescending)
{
    // we are on the right date
} 
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X