본문 바로가기
프로그래밍/iOS

SNS에서처럼 날짜를 현재부터 지난시간을 계산하여 문자열로 만들기

by 백룡화검 2012. 7. 21.
출처 : http://cafe.naver.com/mcbugi/223326

SNS 같은 곳에서 글 등록할때 보면 "2012년 7월 16일 09:00" 이렇게 나오는게 아니라

"지금 등록", "5분전", "1일전" 이런형태로 나오는 걸 보셨을 겁니다..

간단하게 NSString 카테고리로 만들어 봤습니다.

글 등록 4일부터는 일반 날짜형태로 나오게 됩니다.



선언부

@interface NSString (CustomAddFunction)

+ (NSString *)calculateDate:(NSDate *)date;

@end




구현부

@implementation NSString (CustomAddFunction)

+ (NSString *)calculateDate:(NSDate *)date {
NSString *interval;
int diffSecond = (int)[date timeIntervalSinceNow];
if (diffSecond < 0) { //입력날짜가 과거
//날짜 차이부터 체크
int valueInterval;
int valueOfToday, valueOfTheDate;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSArray *languages = [defaults objectForKey:@"AppleLanguages"];
NSString *currentLanguage = [languages objectAtIndex:0];
NSDateFormatter *formatter = [[[NSDateFormatter alloc]init]autorelease];
[formatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:currentLanguage] autorelease]];
[formatter setDateFormat:@"yyyyMMdd"];
NSDate *now = [NSDate date];
valueOfToday = [[formatter stringFromDate:now] intValue]; //오늘날짜
valueOfTheDate = [[formatter stringFromDate:date] intValue]; //입력날짜
valueInterval = valueOfToday - valueOfTheDate; //두 날짜 차이
if(valueInterval == 1)
interval = @"어제";
else if(valueInterval == 2)
interval = @"2일전";
else if(valueInterval == 3)
interval = @"3일전";
else if(valueInterval > 3) { //4일 이상일때는 그냥 요일, 날짜 표시
if ([currentLanguage compare:@"ko"] == NSOrderedSame)
[formatter setDateFormat:@"EEEE, yyyy년 MMM d일"]; //locale 한국일 경우 "년, 일" 붙이기
else
[formatter setDateFormat:@"EEEE, yyyy. MMM d"];
interval = [formatter stringFromDate:date];
}
else { //날짜가 같은경우 시간 비교
[formatter setDateFormat:@"HH"];
valueOfToday = [[formatter stringFromDate:now] intValue]; //오늘시간
valueOfTheDate = [[formatter stringFromDate:date] intValue]; //입력시간
valueInterval = valueOfToday - valueOfTheDate; //두 시간 차이
if(valueInterval == 1)
interval = @"1시간전";
else if(valueInterval >= 2)
interval = [NSString stringWithFormat:@"%i시간전", valueInterval];
else { //시간이 같은 경우 분 비교
[formatter setDateFormat:@"mm"];
valueOfToday = [[formatter stringFromDate:now] intValue]; //오늘분
valueOfTheDate = [[formatter stringFromDate:date] intValue]; //입력분
valueInterval = valueOfToday - valueOfTheDate; //두 분 차이
if(valueInterval == 1)
interval = @"1분전";
else if(valueInterval >= 2)
interval = [NSString stringWithFormat:@"%i분전", valueInterval];
else //분이 같은 경우 차이가 1분 이내
interval = @"지금 등록";
}
}
}
else { //입력날짜가 미래
NSLog(@"%s, 입력된 날짜가 미래임", __func__);
interval = @"지금 등록";
}
return interval;
}

@end



사용법

NSDate *date = [NSDate date];  // 오늘날짜..
NSString *dateString = [NSString calculateDate:date];
NSLog(@"글 등록일 : %@", dateString);

[결과 : "글 등록일 : 지금 등록"]