Я хотел бы проверить, является ли NSDate на той же неделе, что и сегодня. Поэтому я считаю, что weekOfYear
s от NSDateComponents
, как указано в этом post.Проверьте, является ли NSDate текущей неделе, использующей неделю год
- (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 (понедельник), но, к сожалению, без каких-либо успехов.
UPDATE
Я также попробовал этот код, но, к сожалению, с тем же результатом:
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
Обе даты должна быть в номере недели 7 как кратное websites описывает.
Как вы определяете «неделю»? Это текущая «названная неделя» - то есть, начиная с прошлого воскресенья? Начиная с прошлого понедельника? Является ли неделя семь дней подряд? Итак, если 1 января в четверг, то во вторник 6 января все еще первая «неделя»? – DonMag
Возможный дубликат [Как проверить, есть ли NSDate на текущей неделе?] (Http://stackoverflow.com/questions/38970836/how-to-check-if-nsdate-is-in-current-week) –
@DonMag по-моему, неделя с понедельника по воскресенье, как в этом примере: http://week-number.net/calendar-with-week-numbers-2017.html – user3191334