Получить все даты (не дни) между двумя NSDates - PullRequest
1 голос
/ 28 сентября 2011

Как я могу получить все даты, которые приходят между 2 датами?

Например: Дата начала = 2011/01/25 Дата окончания = 2011/02/03

Ответы [ 3 ]

2 голосов
/ 26 сентября 2015

NSCalendarUnit служит для определения шага между датами и обеспечения нормализации дат.

API iOS 8, Swift 2.0

    func generateDates(calendarUnit: NSCalendarUnit, startDate: NSDate, endDate: NSDate) -> [NSDate] {

            let calendar = NSCalendar.currentCalendar()
            let normalizedStartDate = calendar.startOfDayForDate(startDate)
            let normalizedEndDate = calendar.startOfDayForDate(endDate)

            var dates = [normalizedStartDate]
            var currentDate = normalizedStartDate

            repeat {

                currentDate = calendar.dateByAddingUnit(calendarUnit, value: 1, toDate: currentDate, options: NSCalendarOptions.MatchNextTime)!
                dates.append(currentDate)

            } while !calendar.isDate(currentDate, inSameDayAsDate: normalizedEndDate)

            return dates
    }
2 голосов
/ 28 сентября 2011

1) Найдите количество дней между двумя датами. Тогда,

for(i=0;i<noofdays;i++)
{
//Find the next date
//add to the array
}

Чтобы найти количество дней

Найти следующую дату

0 голосов
/ 13 октября 2015

Чтобы найти все дни между двумя NSDates:

- (void)cerateDaysArray{
    _daysArray = [NSMutableArray new];
    NSCalendar *calendar = [[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];
    [calendar setTimeZone:[NSTimeZone systemTimeZone]];
    NSDate *startDate = [_minDate copy];
    NSDateComponents *deltaDays = [NSDateComponents new];
    [deltaDays setDay:1];
    [_daysArray addObject:startDate];
    while ([startDate compare:_maxDate] == NSOrderedAscending) {
       startDate = [calendar dateByAddingComponents:deltaDays toDate:startDate options:0];
       [_daysArray addObject:startDate];
   }
}
...