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?
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?
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 9
inside (9 - weekdayToday) % 7;
by 7 + weekDayYouWant
, remembering that sunday = 1, monday = 2...
nextMonday
code: daysToMonday = (daysToMonday == 0) ? 7 : daysToMonday;
. In this way, you would be adding 7 days instead of 0 days when the current day is monday. If you find a better solution for this case, just let me know –
Intuition nextDayAfterDate:matchingComponents:options:
of NSCalendar
. It can consider daylight saving changes all over the world and is much more reliable than 86400
. –
Incidence 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)
© 2022 - 2024 — McMap. All rights reserved.