Click here to Skip to main content
65,938 articles
CodeProject is changing. Read more.
Articles / Mobile / iPhone

Formatting Dates relative to Now – Objective C (iPhone)

4.00/5 (4 votes)
1 Sep 2009Ms-PL 19.4K  
A user friendly dateformatter in objective C

Introduction

Many a times, in an iPhone application, you might need to format the date relative to today. This code snippet will help you do it.

C++
(NSString *) formattedDateRelativeToNow:(NSDate *)date
{
   NSDateFormatter *mdf = [[NSDateFormatter alloc] init];
   [mdf setDateFormat:@"yyyy-MM-dd"];
   NSDate *midnight = [mdf dateFromString:[mdf stringFromDate:date]];
   [mdf release];

   NSInteger dayDiff = (int)[midnight timeIntervalSinceNow] / (60*60*24);
   NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 

   if(dayDiff == 0)
      [dateFormatter setDateFormat:@"'Today, 'h':'mm aaa"];
   else if(dayDiff == -1)
      [dateFormatter setDateFormat:@"'Yesterday, 'h':'mm aaa"];
   else if(dayDiff == -2)
      [dateFormatter setDateFormat:@"MMMM d', Two days ago'"];
   else if(dayDiff > -7 && dayDiff <= -2)
      [dateFormatter setDateFormat:@"MMMM d', This week'"];
   else if(dayDiff > -14 && dayDiff <= -7)
      [dateFormatter setDateFormat:@"MMMM d'; Last week'"];
   else if(dayDiff >= -60 && dayDiff <= -30)
      [dateFormatter setDateFormat:@"MMMM d'; Last month'"];
   else if(dayDiff >= -90 && dayDiff <= -60)
      [dateFormatter setDateFormat:@"MMMM d'; Within last three months'"];
   else if(dayDiff >= -180 && dayDiff <= -90)
      [dateFormatter setDateFormat:@"MMMM d'; Within last six months'"];
   else if(dayDiff >= -365 && dayDiff <= -180)
      [dateFormatter setDateFormat:@"MMMM d, YYYY'; Within this year'"];
   else if(dayDiff < -365)
      [dateFormatter setDateFormat:@"MMMM d, YYYY'; A long time ago'"];

   return [dateFormatter stringFromDate:date];
} 

License

This article, along with any associated source code and files, is licensed under The Microsoft Public License (Ms-PL)