У меня есть один запрос относительно NSDate. У меня есть дата, то есть "2011-10-04 07:36:38 +0000", и я хочу проверить, есть ли эта дата вчера или сегодня или в будущем.
Как я могу это сделать?
У меня есть один запрос относительно NSDate. У меня есть дата, то есть "2011-10-04 07:36:38 +0000", и я хочу проверить, есть ли эта дата вчера или сегодня или в будущем.
Как я могу это сделать?
Попробуйте следующее:
Примечание. Измените формат даты в соответствии с вашими потребностями.
NSDateFormatter* df = [[NSDateFormatter alloc] init];
[df setDateFormat:@"MM/dd/yyyy"];
NSDate* enteredDate = [df dateFromString:@"10/04/2011"];
NSDate * today = [NSDate date];
NSComparisonResult result = [today compare:enteredDate];
switch (result)
{
case NSOrderedAscending:
NSLog(@"Future Date");
break;
case NSOrderedDescending:
NSLog(@"Earlier Date");
break;
case NSOrderedSame:
NSLog(@"Today/Null Date Passed"); //Not sure why This is case when null/wrong date is passed
break;
}
См. Документация Apple по расписанию дат:
NSDate *startDate = ...;
NSDate *endDate = ...;
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:startDate
toDate:endDate options:0];
NSInteger months = [components month];
NSInteger days = [components day];
Если days
находится между +1 и -1, то ваша дата является кандидатом на "сегодня". Очевидно, вам нужно подумать о том, как вы обрабатываете часы. Предположительно, самым простым было бы установить, чтобы все даты были 00: 00.00 часов в день, о котором идет речь (обрезать дату, используя такой подход), а затем использовать эти значения для расчета. Таким образом, вы получите 0 на сегодня, -1 вчера, +1 на завтра, и любое другое значение также расскажет вам, как далеко все прошло в будущем или в прошлом.
Используйте любое из следующих действий в соответствии с потребностью ура,
– earlierDate:
– laterDate:
– compare:
-(NSString*)timeAgoFor:(NSString*)tipping_date
{
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"yyyy-MM-dd"];
NSDate *date = [dateFormatter dateFromString:tipping_date];
NSString *key = @"";
NSTimeInterval ti = [date timeIntervalSinceDate:[NSDate date]];
key = (ti > 0) ? @"Left" : @"Ago";
ti = ABS(ti);
NSDate * today = [NSDate date];
NSComparisonResult result = [today compare:date];
if (result == NSOrderedSame) {
return[NSString stringWithFormat:@"Today"];
}
else if (ti < 86400 * 2) {
return[NSString stringWithFormat:@"1 Day %@",key];
}else if (ti < 86400 * 7) {
int diff = round(ti / 60 / 60 / 24);
return[NSString stringWithFormat:@"%d Days %@", diff,key];
}else {
int diff = round(ti / (86400 * 7));
return[NSString stringWithFormat:@"%d Wks %@", diff,key];
}
}