Сравнивая определенные компоненты NSDate? - PullRequest
5 голосов
/ 16 марта 2011

Как бы я сравнил только компоненты год-месяц-день для 2 NSDates?

Ответы [ 4 ]

11 голосов
/ 17 марта 2011

Вот как вы это сделаете:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSInteger desiredComponents = (NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit);

NSDate *firstDate = ...; // one date
NSDate *secondDate = ...; // the other date

NSDateComponents *firstComponents = [calendar components:desiredComponents fromDate:firstDate];
NSDateComponents *secondComponents = [calendar components:desiredComponents fromDate:secondDate];

NSDate *truncatedFirst = [calendar dateFromComponents:firstComponents];
NSDate *truncatedSecond = [calendar dateFromComponents:secondComponents];

NSComparisonResult result = [truncatedFirst compare:truncatedSecond];
if (result == NSOrderedAscending) {
  //firstDate is before secondDate
} else if (result == NSOrderedDescending) {
  //firstDate is after secondDate
}  else {
  //firstDate is the same day/month/year as secondDate
}

По сути, мы берем две даты, отбираем их биты часов-минут-секунд и превращаем их обратно в даты.Затем мы сравниваем эти даты (у которых больше нет компонента времени; только компонент даты) и видим, как они сравниваются с другими.

ПРЕДУПРЕЖДЕНИЕ: набрано в браузере и не скомпилировано.Будьте бдительны

4 голосов
/ 16 марта 2011

Проверить эту тему NSDate получить год / месяц / день

Как только вы извлекаете день / месяц / год, вы можете сравнить их как целые числа.

Если вам не нравится этот метод

Вместо этого вы можете попробовать это ..

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

[dateFormatter setDateFormat:@"yyyy"];
int year = [[dateFormatter stringFromDate:[NSDate date]] intValue];

[dateFormatter setDateFormat:@"MM"];
int month = [[dateFormatter stringFromDate:[NSDate date]] intValue];

[dateFormatter setDateFormat:@"dd"];
int day = [[dateFormatter stringFromDate:[NSDate date]] intValue];
  • И еще один способ ...

    NSDateComponents *dateComp = [calendar components:unitFlags fromDate:date];
    
    NSInteger year = [dateComp year];
    
    NSInteger month = [dateComp month];
    
    NSInteger day = [dateComp day];
    
0 голосов
/ 10 мая 2017

Начиная с iOS 8, вы можете использовать -compareDate:toDate:toUnitGranularity: метод NSCalendar.

Как это:

    NSComparisonResult comparison = [[NSCalendar currentCalendar] compareDate:date1 toDate:date2 toUnitGranularity:NSCalendarUnitDay];
0 голосов
/ 16 марта 2011

С помощью метода -[NSDate compare:] - NSDate Compare Reference

...