Цель C, сравнивая две даты - PullRequest
0 голосов
/ 16 февраля 2012

Я пытаюсь сравнить две даты, но я не вижу, как это работает вообще ...

это код, который я использую:

   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 ... по какой-либо причине?

Ответы [ 4 ]

2 голосов
/ 17 февраля 2012

Значения result1 и result2 имеют одно из следующих значений.

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

Единственное время (result2 && result1) не вернет true, если один из них оценивается как false или 0. Это происходит только в том случае, если одна из дат точно такая же, как сейчас.

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

if (result1 == NSOrderedDescending) {
    // result1 is in the past
}
1 голос
/ 17 февраля 2012

NSComparisonResult не является логическим значением. См. Документацию .В зависимости от того, как вы хотите вводить данные, вы должны проверить NSOrderedAscending (сейчас раньше), NSOrderedSame (те же даты) или NSOrderedDescending (сейчас позже).

0 голосов
/ 31 мая 2016

Используя эту функцию, вы можете сравнить две даты. Это проверенная функция и она отлично работает на моем конце.

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

}

0 голосов
/ 17 февраля 2012

попробуйте это.

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