给定一个任意日期,我需要找到该月下一周第一天的日期 . 请注意,它并不像在当前日期添加7天那么简单,因为该月的最后一周可能少于7天 . 这是我现在使用的代码:
NSCalendar* calendar = [NSCalendar currentCalendar];
NSDateComponents* components = [calendar components:NSWeekOfMonthCalendarUnit|NSYearCalendarUnit|NSMonthCalendarUnit|NSWeekCalendarUnit|NSDayCalendarUnit fromDate:currentDate];
NSLog(@"week of month: %ld", [components weekOfMonth]);
[components setWeekOfMonth:[components weekOfMonth] + 1];
NSLog(@"new week of month: %ld", [components weekOfMonth]); //week of month is now 2
[components setWeekday:1];
NSDate *nextWeek = [calendar dateFromComponents:components];
例如,currentDate设置为2012-10-01 . 在这个例子中,nextWeek始终是2012-10-01 . 看来发送 setWeekOfMonth:
不会增加 NSDateComponents
对象中的其他日期组件 . 我是否配置了错误的日期组件,或 setWeekOfMonth:
不应该这样工作?
2 回答
所以....让我们从
NSDate
和NSCalendar
开始:弄清楚该日期的哪一天是:
让我们将该日期移至下周:
此时,您的日期指向下周的第一天 . 现在我们应该验证它仍然在同一个月:
当我运行这个时,我知道下周的开始时间是2012年12月30日(星期日,因为我的日历星期日开始于星期日) .
但是,如果我希望星期一的第一天开始,我可以在这个代码前面加上:
如果我这样做,那么
startOfNextWeek
将于2012年12月31日结果 .这是一个有效的答案: