Changing timestamp to readable human time.

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;
}
/r/iOSProgramming Thread