Reputation: 20985
I use this method for adding month to a date
- (NSDate *)sameDateByAddingMonths:(NSInteger)addMonths {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents * components = [calendar components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit) fromDate:self];
[components setMonth:components.month + addMonths];
return [calendar dateFromComponents:components];
}
But when the previous month in self NSDate, had more days, than it jumps on the first day next next month, like
June has 31 => self is June 31 Calling this, sets the date to 1.August, since July has 30 days
How to get this right? i thought this should behave "right" and clip on the end of month
Upvotes: 4
Views: 2453
Reputation: 1815
You can use such a method to solve the issue, here I'm adding 18 months to a date:
+(NSDate *)addEighteenMonthsToDate:(NSDate *)startDate {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *newDate = [startDate copy];
newDate = [calendar dateByAddingUnit:NSCalendarUnitYear value:1 toDate:startDate options:0];
newDate = [calendar dateByAddingUnit:NSCalendarUnitMonth value:6 toDate:newDate options:0];
return newDate; }
Upvotes: 0
Reputation: 539835
That's what dateByAddingComponents
is for:
- (NSDate *)sameDateByAddingMonths:(NSInteger)addMonths {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setMonth:addMonths];
return [calendar dateByAddingComponents:components toDate:self options:0];
}
Upvotes: 8