How to get a time since string from a NSDate object?

cocoa, datetime, format, iphone

Solution

It's much better to use NSCalendar for this. It's designed for this sort of conversion.

NSUInteger desiredComponents = NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSHourCalendarUnit | NSDayCalendarUnit | NSMinuteCalendarUnit | NSSecondCalendarUnit;
NSDateComponents *elapsedTimeUnits = [[NSCalendar currentCalendar] components:desiredComponents 
                                                                   fromDate:activityDate 
                                                                   toDate:[NSDate date] 
                                                                   options:0];

Problem

Basically, I'm getting a date time string from an API, and I want to show in the app that this activity happened '5 hours ago' or '3 days ago', and so on... I am currently trying to get the NSTimeInterval from `[NSDate timeIntervalSinceNow]` method. And then converting the time interval to NSDate again using `[NSDate dateWithTimeIntervalSince1970:interval]`. And then checking the interval to see if its less that 60/3600/86400/etc, to set the right format for an output NSDateFormatter object. Is this the right way to do it? Or is there a easier/better way to do this?

Original source

Related problems