Astuces développement iPhone 7: Deux NSDate sont-elles du même jour ?

Voilà un problème simple qui s’est posé lors d’un de mes développement: comme vérifier si deux dates sont bien le même jour ? Ceci, en gardant les notions de fuseau horaires et compagnie. Bien que le problème soit simple, la solution n’est pas si anodine que cela.

Il s’agit, dans un premier temps, de préciser dans quel calendrier on se situe. Ici, on est tout simple dans le calendrier NSGregorianCalendar. Ensuite, on extrait le composant de la date qui nous intéresse (ici: le jour). Puis, il ne reste plus qu’a comparer les deux composants extraits pour déterminer si les deux NSDate sont bien le même jour.

Voici la méthode qui fait cela (en étendant NSDate au passage) et l’utilisation:

Ajoute dans la classe NSDate en dérivant

// Le .h
#import 

@interface NSDate (NSDateAdditions)
-(BOOL) isTheSameDayAsThisDate:(NSDate*)date;
@end
// Le .m
@implementation NSDate (NSDateAdditions)

-(BOOL) isTheSameDayAsThisDate:(NSDate*)date {
	NSCalendar *gregorian = [[NSCalendar alloc]	initWithCalendarIdentifier:NSGregorianCalendar];
	NSDateComponents *comps1 = [gregorian components:NSDayCalendarUnit fromDate:date];
	NSDateComponents *comps2 = [gregorian components:NSDayCalendarUnit fromDate:self];
	[gregorian release];
	return ([comps1 isEqual:comps2]);
}

@end
// startDate et endDate étant deux NSDate
if([startDate isTheSameDayAsThisDate:endDate])
{
	NSLog(@"startDate et endDate sont le même jour");
}

Laisser un commentaire

Un nom (requis)

Un mail (requis)

Peut être une URL ?

Réaction:

 

Coins sympas