Domanda

I want to get the date of the next Monday after the current date.

So if today's date is 2013-08-09 (Friday) then I want to get the date 2013-08-12.

How can I do this?

È stato utile?

Soluzione

This piece of code should get what you want. It simply calculates how many days are from monday and append it from current's date.

NSDate *now = [NSDate date];
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents *components = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit fromDate:now];

NSUInteger weekdayToday = [components weekday];  
NSInteger daysToMonday = (9 - weekdayToday) % 7;

NSDate *nextMonday = [now dateByAddingTimeInterval:60*60*24*daysToMonday];

Untested, but should work, and without worrying about changing first dates of calendar.

And it can even be easily addapted to every another day of the week, just change the 9inside (9 - weekdayToday) % 7; by 7 + weekDayYouWant, remembering that sunday = 1, monday = 2...

Altri suggerimenti

You can use NSCalendar method dateFromComponents: passing a properly initiated NSDateComponents object

NSDateComponents *components = [[NSCalendar currentCalendar] components: NSYearCalendarUnit | NSWeekOfYearCalendarUnit fromDate:[NSDate date]];

NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setWeekOfYear:[components weekOfYear] + 1];
[comps setWeekday:1];
[comps setYear:[components year]];
NSCalendar *calendar = [NSCalendar currentCalendar];
[calendar setFirstWeekday:2]; //This needs to be checked, which day is monday?
NSDate *date = [calendar dateFromComponents:comps];

Something along these lines could work (blindly typed)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top