查找下周一的NSDate

时间:2013-08-09 13:49:06

标签: cocoa cocoa-touch nsdate date-arithmetic

我希望在当前日期之后获得下周一的日期。

所以如果今天的日期是2013-08-09(星期五),那么我想得到2013-08-12的日期。

我该怎么做?

2 个答案:

答案 0 :(得分:32)

这段代码应该得到你想要的。它只是计算星期一的天数,并从当前日期开始附加。

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];

未经测试,但应该有效,没有担心更改日历的第一个日期。

它甚至可以轻松地添加到本周的每隔一天,只需将9内的(9 - weekdayToday) % 7;更改为{{1}记住sunday = 1,monday = 2 ...

答案 1 :(得分:5)

您可以使用NSCalendar方法dateFromComponents:传递正确发起的NSDateComponents对象

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];

沿着这些方面的某些东西可以起作用(盲目输入)