Даты - это просто обертки вокруг NSTimeIntervals.Они не имеют понятия о местном времени, поэтому вы не можете получить значение дня непосредственно из них.
Вы можете использовать NSDateFormatter, например так:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy/MM/dd"];
NSString *today = [formatter stringFromDate:[NSDate date]];
NSString *dateToCompare = [formatter stringFromDate:someDate];
if ([dateToCompare isEqualToString:today])
{
...
}
Форматеры даты выводят датуиспользуя ваш местный часовой пояс, так что вы можете гарантировать, что день будет правильным для пользователя.
Если вы действительно хотите убедиться, что события разнесены более чем на 24 часа (чтобы предотвратить мошенничество), это намного проще, простосделайте это:
if ([date1 timeIntervalSinceDate:date2] > 3600*24)
{
...
}
ОБНОВЛЕНИЕ: Как отмечает abbood в комментариях, создание объектов NSDateFormatter может быть дорогим / медленным, поэтому вы должны держаться за них, если они будут использоваться повторно.1012 * Не рекомендуется хранить их в статической переменной или синглтоне, потому что они не являются поточно-ориентированными, но вы можете сохранить их в threadDictionary текущего потока, например:
//check for a cached formatter and recreate if needed
NSMutableDictionary *threadDict = [[NSThread currentThread] threadDictionary];
NSDateFormatter *formatter = threadDict[@"someUniqueKey"];
if (!formatter)
{
//create the formatter
formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"yyyy/MM/dd"];
//cache the formatter
threadDict[@"someUniqueKey"] = formatter;
}
//use the formatter
...