Сравнение NSDates Without Regard To Time

По сути, у меня есть функция чаевых с конкретными подсказками, связанными с датами, и мне нужен способ сравнить текущий NSDate с сохраненной датой для подсказки, независимо от времени. Очевидно, что совет на 1 января имеет значение в 10 утра и 10:30, поэтому я не могу буквально сравнить NSDates . Вот некоторые из вещей, которые я пробовал:

Попробуйте 1 – не работает

 NSDateComponents *components = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]]; NSInteger day = [components day]; NSInteger month = [components month]; NSInteger year = [components year]; NSDateFormatter *df = [[NSDateFormatter alloc] init]; // [df setDateFormat:@"yyyy-MM-dd hh:mm:ss a"]; [df setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"]; 

Попробуйте 2 – не работает

 NSString * zoneString = [[NSString stringWithFormat:@"%i-%i-%iT00:00:00", year, month, day] substringFromIndex:([[NSString stringWithFormat:@"%i-%i-%iT00:00:00", year, month, day] length] - 5)]; NSTimeInterval timeInterval = [[zoneString substringToIndex:3] intValue] * 3600; timeInterval += [[zoneString substringFromIndex:3] intValue] * 60; NSDateFormatter * formatter = [[NSDateFormatter alloc] init]; [formatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:timeInterval]]; [formatter setDateFormat:@"yyyy'-'MM'-'dd' 'HH':'mm':'ss ZZZ"]; NSLog(@"%@", [formatter stringFromDate:myDate]); 

Попробуйте 3 – не работает

 NSDate *date = [NSDate date]; [[NSCalendar currentCalendar] rangeOfUnit:NSDayCalendarUnit startDate:&date interval:NULL forDate:date]; NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; [dateFormat setDateFormat:@"yyyy-MM-dd"]; if ([[dateFormat stringFromDate:date] isEqualToString:[dateFormat stringFromDate:tipDate]]) 

Как правило, при сравнении или управлении NSDate s правильным инструментом для задания обычно является комбинация NSCalendar и NSDateComponents .

Используйте NSDateFormatter только тогда, когда вам нужно форматировать и отображать NSDate .

Имея это в виду, NSDateComponents – это путь, так как вы хотите сравнить подмножество компонентов из двух дат.

Создайте два экземпляра NSDateComponents и сравните их.

Пример:

 - (BOOL)isToday:(NSDate *)date { NSDateComponents *todayComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:[NSDate date]]; NSDateComponents *dateComponents = [[NSCalendar currentCalendar] components:NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit fromDate:date]; return [dateComponents isEqual:todayComponents]; }