10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Objective-Cで日付を綺麗に表示する

Last updated at Posted at 2013-02-02
date

+ (NSString*)srtringForDate:(NSDate*)date{
  #define IS_FUTURE_THRESHOLD -300
  
  enum DateDisplayFormat {
    DateDisplayFormatRelative,
    DateDisplayFormatAbsolute,
    DateDisplayFormatTwitterGuideline,
    DateDisplayFormatError
  };
  
  NSInteger sec = (int)[[NSDate date] timeIntervalSinceDate:date];
  int casenum;
  if(sec < IS_FUTURE_THRESHOLD) {
    casenum = DateDisplayFormatError;
  } else {
    casenum = DateDisplayFormatRelative;
  }
  
  switch (casenum)
  {
    case DateDisplayFormatRelative: {
      //相対日時
      if (sec < 60) {
        return NSLocalizedString(@"just now",nil);
      } else if (sec < 120) {
        return NSLocalizedString(@"1 minute ago",nil);
      } else if (sec < 3600) {
        return [NSString stringWithFormat:@"%d%@",sec / 60, NSLocalizedString(@" minutes ago",nil)];
      } else if (sec < 7200) {
        return NSLocalizedString(@"1 hour ago",nil);
      } else if (sec < 86400) {
        return [NSString stringWithFormat:@"%d%@",sec / 3600, NSLocalizedString(@" hours ago",nil)];
      } else if (sec < 172800) {
        return NSLocalizedString(@"1 day ago",nil);
      } else {
        return [NSString stringWithFormat:@"%d%@",sec / 86400, NSLocalizedString(@" days ago",nil)];
      }
    } case DateDisplayFormatAbsolute: {
      //絶対日時
      if (sec < 60){
        return NSLocalizedString(@"just now",nil);
      }
      
      NSDateFormatter *formatterHour = [[NSDateFormatter alloc] init];
      [formatterHour setDateFormat:@"HH:mm"];
      NSDateFormatter *formatterDay = [[NSDateFormatter alloc] init];
      [formatterDay setDateFormat:@"MM/dd(E)"];
      
      if ([[formatterDay stringFromDate:date] isEqualToString:[formatterDay stringFromDate:[NSDate date]]]){
        return [NSString stringWithFormat:@"%@%@", NSLocalizedString(@"Today ",nil), [formatterHour stringFromDate:date]];
      } else if ([[formatterDay stringFromDate:date] isEqualToString:[formatterDay stringFromDate:[NSDate dateWithTimeIntervalSinceNow:-86400]]]){
        return [NSString stringWithFormat:@"%@%@", NSLocalizedString(@"Yesterday ",nil), [formatterHour stringFromDate:date]];
      } else {
        return [NSString stringWithFormat:@"%@ %@", [formatterDay stringFromDate:date], [formatterHour stringFromDate:date]];
      }
    } case DateDisplayFormatTwitterGuideline: {
      if (sec < 60) {
        return (@"now");
      } else if (sec < 3600) {
        return [NSString stringWithFormat:@"%d%@",sec / 60, NSLocalizedString(@"m",nil)];
      } else if (sec < 86400) {
        return [NSString stringWithFormat:@"%d%@",sec / 3600, NSLocalizedString(@"h",nil)];
      }
      if([NSLocalizedString(@"Language",nil) isEqualToString:@"ja_JP"]) {
        NSDateFormatter *formatterDay = [[NSDateFormatter alloc] init];
        [formatterDay setDateFormat:@"MM/dd"];
        return [formatterDay stringFromDate:date];
      }
      
      NSDateFormatter *formatterMonth = [[NSDateFormatter alloc] init];
      [formatterMonth setDateFormat:@"MM"];
      NSDateFormatter *formatterDay = [[NSDateFormatter alloc] init];
      [formatterDay setDateFormat:@"dd"];
      
      return [NSString stringWithFormat:@"%@ %@",
              [self monthDigitStringToMonthString : [formatterMonth stringFromDate:date]],
              [formatterDay stringFromDate:date]
              ];
    } default: {
      //Error or DateDisplayFormatError
      NSDateFormatter *formatterHour = [[NSDateFormatter alloc] init];
      [formatterHour setDateFormat:@"HH:mm"];
      NSDateFormatter *formatterDay = [[NSDateFormatter alloc] init];
      [formatterDay setDateFormat:@"MM/dd(E)"];
      return [NSString stringWithFormat:@"%@ %@", [formatterDay stringFromDate:date], [formatterHour stringFromDate:date]];
    }
  }
  NSLog(@"ERROR : DateFormat is missing.");
  return @"";
}

+ (NSString *)monthDigitStringToMonthString:(NSString *)monthDigitString
{
  NSDictionary *month = @{
  @"01" : @"Jan", @"02" : @"Feb", @"03" : @"Mar", @"04" : @"Apr",
  @"05" : @"May", @"06" : @"Jun", @"07" : @"Jul", @"08" : @"Aug",
  @"09" : @"Sep", @"10" : @"Oct", @"11" : @"Nov", @"12" : @"Dec"
  };
  
  NSString *ret = [month objectForKey:monthDigitString];
  if (!ret) {
    NSLog(@"Month %@",monthDigitString);
    NSAssert(NO, @"DateFormatError");
    ret = @"Err";
  }
  return ret;
}
10
10
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?