"지금 등록", "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);
[결과 : "글 등록일 : 지금 등록"]
'프로그래밍 > iOS' 카테고리의 다른 글
IOS 디바이스별 화면 구성요소 (0) | 2012.07.21 |
---|---|
인엡 재구매 복구 로직(restore button) (0) | 2012.07.21 |
iPhone App's 개발 시 GUI 재구성 쉽게 하는 법 (0) | 2012.07.20 |
디버깅시 NSLog 팁 (0) | 2012.07.17 |
NSLog 업그레이드 + Debug 모드에서만 로깅하기 (0) | 2012.07.17 |