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 <Foundation/Foundation.h>
 
 
@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");
}

Cette entrée a été publiée dans Astuce, avec comme mot(s)-clef(s) , . Vous pouvez la mettre en favoris avec ce permalien.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>