2013-08-21 1 views
0

두 날짜 간의 시간 간격이 3 개월보다 큰지 확인하고 있지만 성공하지 못했습니다. 여기 제가 시도하고있는 것이 있습니다. 내가 뭔가 잘못하고 있니? 어제 detailTextDate를 설정하더라도 evaluationLabel은 계속 표시됩니다. dateFormat을 설정해야합니까?iOS의 날짜 비교

NSString *detailTextDate = @"August 11, 2013"; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    dateFormatter.dateStyle = NSDateFormatterLongStyle; 

    NSDate *startDate = [dateFormatter dateFromString:detailTextDate]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 
    NSDate *todaysDate = [NSDate date]; 

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [gregorianCalendar components:NSMonthCalendarUnit 
                 fromDate:startDate 
                  toDate:todaysDate 
                 options:0]; 
    if(components.month >= 3){ 
     evaluationLabel.hidden = NO; 
    } 

} 

//tried using NSYearCalendarUnit, Month, Day etc. 

//startDate = 2013-08-11 06:00:00 +0000, detailTextDate = August 11, 2013, components = //<NSDateComponents: 0x176c3c70> 
// Month: 0 
+1

했다? –

+0

90 일이 아니라 실제 달에 관심이 있으십니까? –

+0

@IanHenry : 3 개월, 90 일, 초, 밀리 초일 수 있습니다. 시간은 여전히 ​​동등한 한 중요하지 않습니다. 나는 또한 며칠 안에 그것을 시도했다. –

답변

0

내 문제가 해결되었습니다. 이유는 모르겠지만 이것이 작동합니다. 희망을 나는 누군가를 도울 것입니다. 이 디버깅 할 때, 날짜의 실제 값은 무엇

NSString *detailTextDate = @"May 23, 2013"; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 

    dateFormatter.dateStyle = NSDateFormatterLongStyle; 



    NSDate *startDate = [dateFormatter dateFromString:detailTextDate]; 
    [dateFormatter setDateFormat:@"yyyy-MM-dd hh:mm:ss"]; 
    NSDate *todaysDate = [NSDate date]; 

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [gregorianCalendar components:NSDayCalendarUnit 
                 fromDate:startDate 
                  toDate:todaysDate 
                 options:0]; 

     NSLog(@"startDate = %@, detailTextDate = %@, components = %ld", startDate, detailTextDate, (long)components.day); 
    if(components.day >= 90){ 
     evaluationLabel.hidden = NO; 
    } 

} 
0
에만 NSYearCalendarUnit을 요구하고

; 아마도 NSMonthCalendarUnit을 요구하고 싶을 것입니다.

+0

시도해 보았지만 불행히도 작동하지 않았습니다. –

+1

또한, 'NSDate * todaysDate = [dateFormatter dateFromString : [dateFormatter stringFromDate : [NSDate date]]];'중복입니다; 당신은'NSDate * todaysDate = [NSDate date]; '만하면됩니다. – Wevah

+0

감사합니다. 내가 왜 그렇게했는지 모르겠다. –

-1

timeIntervalSinceNow을 사용하면 과거에 발생한 정도를 파악할 수 있습니다.

NSTimeInterval을 반환하며 double의 초를 나타내는 typedef입니다.

NSTimeInterval month = 60.0 * 60.0 * 24.0 * 30.0; 
NSTimeInterval timeUntilNow = -[startDate timeIntervalSinceNow]; 
if (timeUntilNow > month * 3.0) { 
    ... 
} 
+1

시간 간격을 기반으로 한 달력 계산은 오류가 있습니다. 또한이 코드는 한 달에서 72 분까지입니다. –

+0

@IanHenry : 시도해 본 결과, evaluationLabel.hidden = NO; if 문 내에서 여전히 evaluationLabel을 표시합니다. startDate는 어제와 같습니다. –

+0

@CarlVeazey 월 산술에 능숙합니다. 하지만 "오류가있는"의미가 무엇인지 확신 할 수 없습니다. 아는 한 내 지식은 (지금) 정확히 90 일 전에 무슨 일이 있었는지 테스트, 의견에 명시된 묻는 사람 바람직한 행동했다. –

0

다음 로그 [component day]에 대한 [component month]에 대한 12 9 (나는 당신의 예에서부터 시작 날짜를 변경 주, 달 차이는 0 것) : 그래서 당신은 같은 일을 할 수

NSString *detailTextDate = @"August 11, 2012"; 

    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    dateFormatter.dateStyle = NSDateFormatterLongStyle; 

    NSDate *startDate = [dateFormatter dateFromString:detailTextDate]; 
    NSDate *todaysDate = [NSDate date]; 

    NSCalendar *gregorianCalendar = [[NSCalendar alloc] 
            initWithCalendarIdentifier:NSGregorianCalendar]; 

    NSUInteger flags = NSMonthCalendarUnit | NSDayCalendarUnit; 
    NSDateComponents *components = [gregorianCalendar components:flags 
                 fromDate:startDate 
                 toDate:todaysDate 
                 options:0]; 

    NSLog(@"%ld", (long)[components month]); 
    NSLog(@"%ld", (long)[components day]); 
-1
NSString *detailTextDate = @"August 11, 2013"; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
dateFormatter.dateStyle = NSDateFormatterLongStyle; 

NSDate *enddate = [dateFormatter dateFromString:detailTextDate]; 
NSDate* currentdate = [NSDate date]; 
NSTimeInterval distanceBetweenDates = [enddate timeIntervalSinceDate:currentdate]; 
NSInteger secondsBetweenDates = distanceBetweenDates/60; 

if(secondsBetweenDates>0){ 
// Here you can compare seconds 
} 
0
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
    [dateFormatter setDateFormat:@"MMMM dd, yyyy"]; 
    NSDate *date1 = [dateFormatter dateFromString:detailTextDate]; 

    NSDate *todaysDate = [NSDate date]; 

    unsigned int unitFlags = NSDayCalendarUnit,NSMonthCalendarUnit,NSYearCalendarUnit; 

    NSCalendar *gregorian = [[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *comps = [gregorian components:unitFlags fromDate:date1 toDate:todaysDate options:0]; 

    int month = [comps month]; 
    NSLog(@"%d",month); 

    if(month>0) 
    { 

    }