7

我想获取当前日期之后的下周一的日期。

所以如果今天的日期是 2013 年 8 月 9 日(星期五),那么我想得到日期 2013 年 8 月 12 日。

我怎样才能做到这一点?

4

2 回答 2

33

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

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;7 + weekDayYouWant,记住星期日 = 1,星期一 = 2...

于 2013-08-09T14:28:16.727 回答
4

您可以使用传递正确启动对象的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];

这些方面的东西可以工作(盲目输入)

于 2013-08-09T13:51:31.597 回答