2012-02-16 66 views
0

我想比較兩個日期,但我看不到它是如何工作在所有...目標C,比較兩個日期

這是我使用的代碼:

NSCalendar* myCalendar = [NSCalendar currentCalendar]; 
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

               fromDate:[NSDate date]]; 
    [components setYear:2012]; 
    [components setMonth:03]; 
    [components setDay:25]; 
    NSDate *startDate = [myCalendar dateFromComponents:components]; 


    NSDateComponents* components2 = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

               fromDate:[NSDate date]]; 
    [components2 setYear:2012]; 
    [components2 setMonth:04]; 
    [components2 setDay:25]; 
    NSDate *endDate = [myCalendar dateFromComponents:components]; 

    NSComparisonResult result1 = [now compare:startDate]; 
    NSComparisonResult result2 = [now compare:endDate]; 

    if (result2 && 

     result1 
     ) { 
     int x =1; 
    } 

的即使這兩個日期在未來,我仍然可以進入if條件......任何原因?

回答

2

result1和result2的值是以下值之一。

enum { 
    NSOrderedAscending = -1, 
    NSOrderedSame, 
    NSOrderedDescending 
}; 
typedef NSInteger NSComparisonResult; 

唯一的一次(RESULT2 & & RESULT1)將不會返回true是當他們中的一個計算結果爲,如果其中一個日期,是完全一樣的,現在假或0這隻發生。

if (result1 == NSOrderedAscending) { 
    // result1 is in the future 
} 

if (result1 == NSOrderedDescending) { 
    // result1 is in the past 
} 
1

NSComparisonResult不是布爾值。 See the documentation。根據您想要如何輸入,您應該檢查NSOrderedAscending(現在更早),NSOrderedSame(相同日期)或NSOrderedDescending(現在更晚)。

0

試試這個。

NSCalendar* myCalendar = [NSCalendar currentCalendar]; 
    NSDateComponents* components = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

               fromDate:[NSDate date]]; 
    [components setYear:2012]; 
    [components setMonth:03]; 
    [components setDay:25]; 
    NSDate *startDate = [myCalendar dateFromComponents:components]; 


    NSDateComponents* components2 = [myCalendar components:NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit 

               fromDate:[NSDate date]]; 
    [components2 setYear:2012]; 
    [components2 setMonth:04]; 
    [components2 setDay:25]; 
    NSDate *endDate = [myCalendar dateFromComponents:components]; 

    NSComparisonResult result1 = [now compare:startDate]; 
    NSComparisonResult result2 = [now compare:endDate]; 

    if (result2 == NSOrderedSame && result1 == NSOrderedSame) { 
     int x =1; 
    } 

NSComparisonResult

這些常量用於指示如何在請求的項目是有序的。

enum { 
    NSOrderedAscending = -1, 
    NSOrderedSame=0, 
    NSOrderedDescending=1 
}; 
typedef NSInteger NSComparisonResult; 
0

通過使用此功能,您可以比較兩個日期。這是經過測試的功能,並在我的最後工作正常。

-(BOOL)dateComparision:(NSDate*)date1 andDate2:(NSDate*)date2{ 

BOOL isTokonValid; 

if ([date1 compare:date2] == NSOrderedDescending) { 
    NSLog(@"date1 is later than date2"); 
    isTokonValid = YES; 
} else if ([date1 compare:date2] == NSOrderedAscending) { 
    NSLog(@"date1 is earlier than date2"); 
    isTokonValid = NO; 
} else { 
    isTokonValid = NO; 
    NSLog(@"dates are the same"); 
} 

return isTokonValid; 

}