Я хотел бы проверить, находится ли NSDate на той же неделе, что и сегодня. Поэтому я рассматриваю weekOfYear
s из NSDateComponents
, как указано в этом опубликовать.
- (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
}
В моем примере у меня есть следующие даты:
today: 2017-02-15 12:00:00 +0000
date: 2017-02-18 12:00:00 +0000
Проблема в том, что todaysWeek
установлено на 7, а anotherWeek
на 8, и я не могу понять, почему.
Я подумал, что проблема может быть в том, что неделя начинается в воскресенье, поэтому я установил первый день недели в календаре на 2 (понедельник), но, к сожалению, безуспешно.
ОБНОВЛЕНИЕ
Я также пробовал этот код, но, к сожалению, с тем же результатом:
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
Обе даты должны приходиться на седьмую неделю, как описывают несколько веб-сайтов.
Week 07 is from Monday February 13, 2017 until (and including) Sunday February 19, 2017.
не должен иметь weekOfYear 8, как код возврата. - person user3191334   schedule 15.02.2017