Heres a snippet from a project I worked on. It's a bit wordy, but it gets the job done.
- (NSString *)remainingTimeInAuction:(NSString *)dateString{
NSString *timeRemaining = @"";
NSString *monthComponent = @"";
NSString *dayComponent = @"";
NSString *hourComponent = @"";
NSString *minuteComponent = @"";
// Set up date formatter used to split items into corresponding arrays
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.timeZone = [NSTimeZone timeZoneWithName:@"GMT"];
dateFormatter.dateFormat = @"YYYY-MM-dd'T'HH:mm:sss'Z'";
NSDate *auctionEndDate = [dateFormatter dateFromString:dateString];
NSDate *now = [[NSDate alloc] init];
NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit | NSHourCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *components = [gregorian components:unitFlags
fromDate:now
toDate:auctionEndDate
options:0];
if (components.month > 1) {
monthComponent = [NSString stringWithFormat:@"%ld months, ", (long)components.month];
} else if (components.month == 1) {
monthComponent = [NSString stringWithFormat:@"%ld month, ", (long)components.month];
}
if (components.day > 1) {
dayComponent = [NSString stringWithFormat:@"%ld days, ", (long)components.day];
} else if (components.day == 1) {
dayComponent = [NSString stringWithFormat:@"%ld day, ", (long)components.day];
}
if (components.hour > 1) {
hourComponent = [NSString stringWithFormat:@"%ld hours, ", (long)components.hour];
} else if (components.hour == 1) {
hourComponent = [NSString stringWithFormat:@"%ld hour, ", (long)components.hour];
}
if (components.minute > 1) {
minuteComponent = [NSString stringWithFormat:@"%ld minutes", (long)components.minute];
} else if (components.minute == 1) {
minuteComponent = [NSString stringWithFormat:@"%ld minute", (long)components.minute];
} else {
minuteComponent = @"Auction has ended.";
}
timeRemaining = [NSString stringWithFormat:@"%@%@%@%@", monthComponent, dayComponent, hourComponent, minuteComponent];
return timeRemaining;
}