目标C,比较两个日期

问题描述:

我想比较两个日期,但我看不到它是如何工作在所有...目标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条件......任何原因?

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 
} 

NSComparisonResult不是布尔值。 See the documentation。根据您想要如何输入,您应该检查NSOrderedAscending(现在更早),NSOrderedSame(相同日期)或NSOrderedDescending(现在更晚)。

试试这个。

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; 

通过使用此功能,您可以比较两个日期。这是经过测试的功能,并在我的最后工作正常。

-(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; 

}