我有这个NSDate类别可以轻松添加或减去日期。几天,几个月和几年都很好,但是几周都没有用。我错过了什么?
- (NSDate *)addDays:(int)days
weeks:(int)weeks
months:(int)months
years:(int)years {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *comps = [calendar components:NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSDayCalendarUnit fromDate:self];
if (days) {
[comps setDay:[comps day] + days];
}
if (weeks) {
[comps setWeek:[comps week] + weeks];
}
if (months) {
[comps setMonth:[comps month] + months];
}
if (years) {
[comps setYear:[comps year] + years];
}
NSDate *nextDate = [calendar dateFromComponents:comps];
return nextDate;
}
致电:
NSDate *showDate = [NSDate date];
showDate = [showDate addDays:0 weeks:1 months:0 years:0];
对于指定日期:2014-06-19 14:00:11 +0000,我预计2014-06-26 04:00:00 +0000的输出。它保持不变。
答案 0 :(得分:0)
来自-[NSCalendar dateFromComponents:]
文档:
当信息不一致时,日历可能会忽略某些组件参数,或者该方法可能返回nil。忽略不必要的组件(例如,Day优先于Weekday和Weekday序数)。
即使您只添加了几周,仍然会为day
实例设置NSDateComponents
。您将在day
和week
之间发生冲突,week
将被忽略。
例如,今天是:
19 Jun 2014, Week 25
如果我将10
添加到周
19 Jun 2014, Week 35
然后19 Jun
显然与Week 35
发生碰撞。
要解决此问题,请创建一个新的NSDateComponents
实例:
NSDateComponents *comps = [[NSDateComponents alloc] init];
[comps setDay:days];
[comps setWeek:weeks];
[comps setMonth:months];
[comps setYear:years];
并使用
NSDate *nextDate = [calendar dateByAddingComponents:comps
toDate:self
options:0];