Deux dates sont-elles dans la même semaine ? Cette date est-elle hier ? avant-hier ? avant-avant-hi
colas_
Membre
Pour ceux que ça intéresserait !
@implementation NSDate (CBDMiscMethods)
/**************************************/
#pragma mark - Aux
/**************************************/
+ (NSLocale *)frenchLocale_CBDMiscMethods
{
static NSLocale * _frenchLocale ;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_frenchLocale = [[NSLocale alloc] initWithLocaleIdentifier:@fr_FR];
});
return _frenchLocale;
}
+ (NSCalendar *)calendar_CBDMiscMethods
{
static NSCalendar * _calendar ;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_calendar = [NSCalendar currentCalendar];
_calendar.locale = [self frenchLocale_CBDMiscMethods];
});
return _calendar;
}
/**************************************/
#pragma mark - Core
/**************************************/
+ (NSInteger)daysBetweenDate:(NSDate*)fromDateTime andDate_cbd_:(NSDate*)toDateTime
{
NSDate *fromDate;
NSDate *toDate;
NSCalendar *calendar = [[self class] calendar_CBDMiscMethods];
fromDate = [calendar startOfDayForDate:fromDate];
toDate = [calendar startOfDayForDate:toDate];
NSDateComponents *difference = [calendar components:NSCalendarUnitDay
fromDate:fromDate
toDate:toDate
options:0];
return [difference day];
}
/*
From SO
http://stackoverflow.com/a/14205168/1670830
*/
- (BOOL)isOnSameWeekAsDate_cbd_:(NSDate*)otherDate
{
NSCalendar *calendar = [[self class] calendar_CBDMiscMethods];
unsigned unitFlags = NSCalendarUnitYearForWeekOfYear | NSCalendarUnitWeekOfYear ;
NSDateComponents *components = [calendar components:unitFlags
fromDate:self];
NSDateComponents *otherComponents = [calendar components:unitFlags
fromDate:otherDate];
return ( [components yearForWeekOfYear] == [otherComponents yearForWeekOfYear] && [components weekOfYear] == [otherComponents weekOfYear] );
}
@end
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne sais pas Joanna. Je dirai que la semaine commence lundi.
Mais en fait ça va dépendre de la local du NSCalendar I guess ;-)
@Ali
T'es sûr ? NSCalendarUnitWeek n'existe pas. Il y a NSCalendarUnitWeekOfYear.
Mais même dans ce cas, je me demande si ça marchera. Si deux dates sont dans la 1ère semaine de l'année mais dans des années différentes, je pense que ta méthode répondra YES.
Après vérification, ça marche
ça marche aussi le 22 Avril 2011 ?
NSCalendar sait très bien gérer les cas aux limites, comme par exemple les cas où l'on voyage dans le temps, par exemple en passant de 23h59 à 24h00 avant de passer à 0h00 ou à l'inverse de perdre des leap seconds, etc...
D'ailleurs d'après la documentation de [NSCalendar startOfdayForDate:], ça marche même quand il y a "plusieurs minuits le même jour" par exemple.
Du coup je pense qu'au même titre, s'il y a plusieurs 5h02pm, ça marche pareil et ça le gère correctement. Par contre ça ne le prend en compte que quand tu appelles ces méthodes sur le bon calendrier ([NSCalendar tardisCalendar]) bien sûr.
Y sont doués à Cupertino quand même ..