2014-01-16 2 views
0

Я хочу получить детали дня с интервалом даты. Например, у меня есть интервал дат 21/12/2013 по 28/12/2013. Теперь я хочу получить весь день от этого интервала, как 21,22,23,24,25,26,27,28.получить часть дней с интервалом даты

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"]; 
[dateFormatter setTimeZone:gmt]; 
[dateFormatter setDateFormat:@"MMM dd, yyyy"]; 
NSString *date_str=[NSString stringWithFormat:@"%@",from_date]; 
NSLog(@"%@",date_str); 
NSString *date_str1=[NSString stringWithFormat:@"%@",to_date]; 
NSLog(@"%@",date_str1); 
NSDate *starting_date = [dateFormatter dateFromString:date_str]; 
NSDate *end_date = [dateFormatter dateFromString:date_str1]; 

NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
NSUInteger unitFlags = NSDayCalendarUnit; 
NSDateComponents *components = [gregorian components:unitFlags fromDate:starting_date toDate:end_date options:0]; 
NSInteger days = [components day]; 

Этот код дает общее количество дней.

Как я могу получить этот выход?

Благодаря

+0

Что такое from_date и to_date? – Kreiri

+0

Почему вы делаете двойное преобразование даты-даты? Чтобы получить массив дней, вам нужно, чтобы цикл повторялся с первого дня до последнего дня. Но вам нужно учитывать переходы с одного месяца на другой (и, может быть, годы) – malex

+0

Вы могли бы создать метод (возможно, в категории NSDate), который добавит день к дате, и повторите, так как вы знаете разницу в датах ... – Larme

ответ

0

Продолжаем из кода и предполагающей,

NSString *date_str=[NSString stringWithFormat:@"%@",@"December 21, 2013"]; 
NSString *date_str1=[NSString stringWithFormat:@"%@",@"December 28, 2013"]; 

Если вам это нужно в том же месяце, он может быть таким образом,

NSDateComponents *component1 = [gregorian components:unitFlags fromDate:starting_date]; 
NSDateComponents *component2 = [gregorian components:unitFlags fromDate:end_date]; 

    for (int i = component1.day; i <= component2.day; i++) { 
     NSLog(@"%i", i); 
    } 

Но если ваши даты расширяются между разными месяцами, тогда вам необходимо добавить проверку для компонентов месяца в цикле.

0

Я буду продолжать свой код, с каким-то грязным кодом шахты, но он получает работу, если то, что вы предоставили ваш формат дата:

NSArray *begining_day = [date_str componentsSeparatedByString:@"/"]; 

NSMutableArray *part_days = [[NSMutableArray alloc] init]; 

for (int i = 0; i < days; i++) { 

[part_days addObject:([begining_day[0] integerValue] + i)]; 

} 

Теперь part_days будет ваши дней, НО! Вы должны обрабатывать конец каждого месяца.

Я на 100% уверен, что вы найдете лучшие решения, но я думал, что могу поделиться первым, о чем я думал, вы можете извлечь из этого выгоду.

0

Вы можете попробовать ниже код:

NSArray *array = [[NSArray alloc] initWithObjects:@"1/12/14",@"2/12/14",@"3/12/14",@"4/12/14",@"5/12/14", nil]; 
for (int i = 0; i < [array count]; i++) { 
    NSArray *myArray = [[array objectAtIndex:i] componentsSeparatedByString:@"/"]; 
    [dayArray addObject:[myArray objectAtIndex:0]]; 

} 
NSLog(@"%@",dayArray); 
0

Вы можете поэтапно добавить 24 часа в свой startDate, пока не пройдете свой endDate. Используя NSDateComponents, вы можете выбрать день. Вместо того, чтобы записывать их в NSLog, просто сохраняйте их в строке или массиве.

NSDate *startDate = [NSDate dateWithTimeIntervalSinceReferenceDate:300000000]; 
NSDate *endDate  = [NSDate dateWithTimeIntervalSinceReferenceDate:302000000]; 

for (NSDate *nextDate = startDate; [nextDate compare:endDate] < 0; nextDate = [nextDate dateByAddingTimeInterval:24*60*60]) { 
    NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:nextDate]; 
    NSInteger day = [components day]; 
    NSLog(@"day %li", (long)day); 
} 
Смежные вопросы