2017-01-31 7 views
0

Я пытаюсь показать разницу в 2 дате в читаемом формате. Как вы можете видеть из моего кода ниже, есть много закрытий if-else. Есть ли какой-либо форматирующий или мой способ, если верно?iOS читаемая строка/формат даты

NSCalendar *c = [NSCalendar currentCalendar]; 
NSDateComponents *components = [c components:(NSCalendarUnitMonth | NSCalendarUnitDay) 
             fromDate:startDate 
              toDate:endDate 
             options:0]; 

NSString *leftTimeStr = @""; 
if (components.month == 0) { 
    if (components.day == 1) { 
     leftTimeStr = @"after 1 day"; 
    } 
    else if (components.day > 1) { 
     leftTimeStr = [NSString stringWithFormat:@"after %ld days", (long)components.day]; 
    } 
} 
else if (components.month == 1) { 
    if (components.day == 0) { 
     leftTimeStr = @"after 1 month"; 
    } 
    else if (components.day == 1) { 
     leftTimeStr = @"after 1 month 1 day"; 
    } 
    else if (components.day > 1) { 
     leftTimeStr = [NSString stringWithFormat:@"after 1 month %ld days", (long)components.day]; 
    } 
} 
else if (components.month > 1) { 
    if (components.day == 0) { 
     leftTimeStr = [NSString stringWithFormat:@"after %ld months", (long)components.month]; 
    } 
    else if (components.day == 1) { 
     leftTimeStr = [NSString stringWithFormat:@"after %ld months 1 day", (long)components.month]; 
    } 
    else if (components.day > 1) { 
     leftTimeStr = [NSString stringWithFormat:@"after %ld months %ld days", (long)components.month, (long)components.day]; 
    } 
} 

Результирующая leftTimeStr строка должна быть как один из Belows:

"after 5 months 22 days", 
"after 5 months 1 day", 
"after 5 months", 
"after 1 month 22 days", 
... 
"after 22 days", 
"after 1 day" 

ответ

1

Используйте следующие категории класса NSDate.

NSDate *date = [[NSDate alloc] initWithTimeIntervalSince1970:0]; 
NSString *ago = [date timeAgo]; 
NSLog(@"Output is: \"%@\"", ago); 
2011-11-12 17:19:25.608 Proj[0:0] Output is: "41 years ago" 

Source from GitHub

+0

Хотя эта ссылка может ответить на этот вопрос, то лучше включить основные части ответа здесь и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/15053385) –

+0

ok thanks @FranzGleichmann. я обновлю свой ответ – KKRocks

1

Для этого вы можете использовать NSDateComponentsFormatter.

NSDateComponentsFormatter *formatter = [[NSDateComponentsFormatter alloc] init]; 
[formatter setAllowedUnits:NSCalendarUnitMonth | NSCalendarUnitDay]; 
formatter.maximumUnitCount = 2; 
formatter.unitsStyle = NSDateComponentsFormatterUnitsStyleFull; 
NSString *difference = [formatter stringFromDate:startDate toDate:endDate]; 
1

Вы можете использовать NSDateComponentsFormatter с SpellOut блок стиля, который может выводить что-то вроде: «Один час, десять минут».

Проверить здесь для подробностей: http://nshipster.com/nsformatter/#nsdatecomponentsformatter