2015-08-20 5 views
0

У меня есть объект JSON, который имеет несколько дат, например: 15/12/2005 или 14/12/2012.Сравнить месяц и день даты в строке по месяц и день текущей даты

Мне нужно провести сравнение месяца и дня с сегодняшним месяцем и днем; год не имеет значения. Я делаю это:

-(void)setSingle:(NSDictionary*)object name:(NSString*)name { 

    NSMutableDictionary * content = [[NSMutableDictionary alloc] initWithDictionary:[[NSUserDefaults standardUserDefaults] objectForKey:name]]; 

    NSLog(@"%@", name); 

    if(name == @"teste") { 
     NSDate *dateReturn = [[NSDate alloc] init]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"dd-MM"]; 

     NSString * tempDate; 
     NSDictionary *dateObjectTemp = nil; 
     NSDictionary * dateObject = [object objectForKey:name]; 

     for (NSDictionary*g in dateObject) { 
      tempDate = [g objectForKey:@"dia"]; 
      dateObjectTemp = g; 

      NSLog(@"Data: %@", tempDate); 

      dateReturn = [dateFormatter dateFromString:tempDate]; 

      NSLog(@"Data: %@", dateReturn); 
      [content setObject:dateObjectTemp forKey:tempDate]; 
     } 

    } else { 
     NSDate *dateReturn = [[NSDate alloc] init]; 
     NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
     [dateFormatter setDateFormat:@"dd-MM-yyyy"]; 

     NSString * tempDate; 
     NSDictionary *dateObjectTemp = nil; 
     NSDictionary * dateObject = [object objectForKey:name]; 

     for (NSDictionary*g in dateObject) { 
      tempDate = [g objectForKey:@"dia"]; 
      dateObjectTemp = g; 

      dateReturn = [dateFormatter dateFromString:tempDate]; 
      [content setObject:dateObjectTemp forKey:tempDate]; 
     } 
    } 

    NSDictionary* cont =content; 
    [[NSUserDefaults standardUserDefaults] removeObjectForKey:name]; 

    [[NSUserDefaults standardUserDefaults] setObject:cont forKey:name]; 

} 

Это поднимает дату, но dataReturn возвращается 2000-12-15. Я хочу только день и месяц.

и когда будет сравнивать следующий метод

-(void)showContent{ 

    if ([self daysBetweenDate:currentDate andDate:self.dateLimit]>=0) { 

     NSDictionary *santododia = [super compareDate:currentDate name:@"santos"]; 
     [self defineContent:[santododia objectForKey:@"texto"]]; 

     self.urlShare = [santododia objectForKey:@"url"]; 
     self.tituloShare = [santododia objectForKey:@"titulo"]; 
    }else{ 
     [self.webView loadHTMLString: @"<font color='black' style='font-family:sans-serif;'>Conteúdo indisponível, escolha a data de hoje ou anterior</font>" baseURL:nil]; 
    } 
} 

Хотя текущая дата матчей, тест не проходит.

-(void) defineContent:(NSString *)string{ 

    string = [parentClass checkStringContent:string]; 
    NSLog(@"Teste: %@", string); 
    if(string.length == 0){ 
     string = @"<font color='black' style='font-family:sans-serif;'>nothing</font>"; 
    } else { 
     string = [NSString stringWithFormat: @"%@ %@", string , @"<style>body {color:#000 !important} .day{margin-top:5px} .month{margin-top:5px} </style>" ]; 
    } 

    [self.webView loadHTMLString: string baseURL:nil]; 

} 
+0

установить формат даты как [dateFormatter setDateFormat: @ "dd/MM/yyyy"]; Тогда все будет хорошо. – Dev

+0

, но я не хочу использовать год. Позвольте мне уточнить. У меня есть текст 12/15/2015 день и еще один день 16/12/2002, если вы заметили разные годы, но что важно, а день и месяц, навсегда будет отображаться на все дни 16/12 текст, а не вопрос год –

ответ

-1

попробовать это сравнить даты -

NSDate *minDate ; 
NSDate *maxDate ; 

NSComparisonResult compareStart = [minDate compare: self.selectedDate]; // date1 is 6/6/2011 00:00 
NSComparisonResult compareEnd = [maxDate compare: self.selectedDate]; // date2 is 9/6/2011 00:00 

if (((compareStart == NSOrderedAscending) || (compareStart == NSOrderedSame)) && (compareEnd == NSOrderedDescending)) 
{ 
    NSLog(@"date is in the right range"); 
} 
else { 
    NSLog(@"Range is not valid ."); 
} 
0

Для сравнения только части на дату, вы должны использовать NSDateComponents. Разбираем ваши строки в NSDate с помощью NSDateFormatter:

NSString * jsonDateString = @"15/12/2005"; 
NSDateFormatter * dF = [NSDateFormatter new]; 
// Format string must match date string! 
dF.dateFormat = @"dd/MM/yyy"; 

NSDate * testDate = [dF dateFromString:jsonDateString]; 
NSDate * today = [NSDate date]; 

Оттуда вы используете NSCalendar к decompose that date и сегодняшнего дня в куски вы заинтересованы в:

NSCalendar * cal = [NSCalendar currentCalendar]; 
NSDateComponents * todayComps = [cal components:NSCalendarUnitMonth|NSCalendarUnitDay 
             fromDate:today]; 
NSDateComponents * testComps = [cal components:NSCalendarUnitMonth|NSCalendarUnitDay 
             fromDate:testDate]; 

Тогда вы можете сравнить эти компоненты даты объекты:

[testComps isEqual:todayComps] 

если результат YES, то две даты имеют одинаковые день и месяц, игнорируя все остальные части даты, включая год.

Смежные вопросы