Вот примерно как я это сделаю (предупреждение: введите в браузере, yadda yadda):
NSDate *startDate = ...; // your start date
NSDate *endDate = ...; // your end date
NSDateComponents *monthDifference = [[NSDateComponents alloc] init];
NSMutableArray *dates = [NSMutableArray arrayWithObject:startDate];
NSUInteger monthOffset = 0;
NSDate *nextDate = startDate;
do {
[dates addObject:nextDate];
[monthDifference setMonth:monthOffset++];
NSDate *d = [[NSCalendar currentCalendar] dateByAddingComponents:monthDifference toDate:startDate options:0];
nextDate = d;
} while([nextDate compare:endDate] == NSOrderedAscending);
Это должно дать вам массив NSDate
объектов, представляющих даты, которые происходят примерно через месяцкроме этого, начиная с начальной даты и заканчивая или около вашей конечной даты.
Если вы хотите отобразить их в удобочитаемом виде, вы будете использовать NSDateFormatter
:
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setDateFormat:@"MMMM yyyy"];
for (NSDate *date in dates) {
NSLog(@"%@", [f stringFromDate:date]);
}
[f release];
Когда я запускаю это на своем компьютере, я получаю:
EmptyFoundation[3327:a0f] January 2010
EmptyFoundation[3327:a0f] February 2010
EmptyFoundation[3327:a0f] March 2010
EmptyFoundation[3327:a0f] April 2010
EmptyFoundation[3327:a0f] May 2010
EmptyFoundation[3327:a0f] June 2010
EmptyFoundation[3327:a0f] July 2010
EmptyFoundation[3327:a0f] August 2010
EmptyFoundation[3327:a0f] September 2010
EmptyFoundation[3327:a0f] October 2010
EmptyFoundation[3327:a0f] November 2010
EmptyFoundation[3327:a0f] December 2010
EmptyFoundation[3327:a0f] January 2011
EmptyFoundation[3327:a0f] February 2011
Это может показаться довольно сложным, но у него есть пара преимуществ:
- это будет работать независимо от того, какой календарной системы вы используете.Просто измените
[NSCalendar currentCalendar]
вызов на другой календарь, и он будет работать в этом (иврит, исламский и т. Д.) - он учитывает месяцы с причудливым числом дней (28 дней против 29 дней, иликалендари с високосными месяцами [да, они существуют])