Je voudrais vérifier si un NSDate est dans la même semaine qu'aujourd'hui. Par conséquent, je considère le weekOfYear
s à partir d'un NSDateComponents
comme mentionné dans ce post.Vérifier si un NSDate est dans la semaine en cours en utilisant la semaine de l'année
- (BOOL)dateIsThisWeek:(NSDate *)date
{
NSCalendar *cal = [NSCalendar currentCalendar];
[cal setFirstWeekday: 2]; // Added in second try
NSDate *today = [NSDate date];
NSDateComponents *todaysComponents = [cal components:NSCalendarUnitWeekOfYear fromDate: today];
NSUInteger todaysWeek = [todaysComponents weekOfYear];
NSDateComponents *otherComponents = [cal components:NSCalendarUnitWeekOfYear fromDate: date];
NSUInteger anotherWeek = [otherComponents weekOfYear];
return todaysWeek == anotherWeek; // todaysWeek=7 | anotherWeek=8
}
Dans mon exemple, j'ai les dates suivantes:
today: 2017-02-15 12:00:00 +0000
date: 2017-02-18 12:00:00 +0000
Le problème est que todaysWeek
est fixé à 7 et anotherWeek
-8 et je ne peux pas imaginer pourquoi.
Je pensais que le problème pourrait être, que la semaine commence un dimanche, donc j'ai mis le premier jour de la semaine du calendrier à 2 (lundi), mais malheureusement sans aucun succès.
MISE À JOUR
J'ai aussi essayé ce code, mais malheureusement, avec le même résultat:
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
NSDateComponents *todaysComponents = [gregorian components:NSCalendarUnitWeekOfYear fromDate:[NSDate date]];
NSUInteger todaysWeek = [todaysComponents weekOfYear];
NSDateComponents *otherComponents = [gregorian components:NSCalendarUnitWeekOfYear fromDate: date];
NSUInteger datesWeek = [otherComponents weekOfYear];
return todaysWeek==datesWeek; // todaysWeek=7 | datesWeek=8
Les deux dates devraient être en nombre de semaines 7 comme plusieurs websites sont décris.
Comment définissez-vous une "semaine"? Est-ce la «semaine nommée» actuelle, c'est-à-dire à partir de dimanche dernier? À partir de lundi dernier? Est-ce une semaine 7 jours consécutifs? Donc, si le 1er janvier est un jeudi, alors le mardi 6 janvier est toujours la première "semaine"? – DonMag
Copie possible de [Comment vérifier si NSDate est dans la semaine en cours?] (Http://stackoverflow.com/questions/38970836/how-to-check-if-nsdate-is-in-current-week) –
@DonMag à mon avis, une semaine est du lundi au dimanche comme dans cet exemple: http://week-number.net/calendar-with-week-numbers-2017.html – user3191334