Worst Post Title ever! This one took me a bit to figure out so I thought I’d post it in case anyone else out there had troubles. I wanted to get an NSDate for a specific day of the week and time from an existing NSDate object in order to create a countdown timer.
This example will get you the NSDate for the following Monday at 8am:
NSDate *today = [NSDate date]; NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; [gregorian setLocale:[NSLocale currentLocale]]; NSDateComponents *nowComponents = [gregorian components:NSYearCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit fromDate:today]; [nowComponents setWeekday:2]; //Monday [nowComponents setWeek: [nowComponents week] + 1]; //Next week [nowComponents setHour:8]; //8a.m. [nowComponents setMinute:0]; [nowComponents setSecond:0]; NSDate *beginningOfWeek = [gregorian dateFromComponents:nowComponents];
Now that you have the new NSDate, you can calculate the difference between the two by using fromDate.