Как узнать количество дней от NSDate до сегодняшнего дня? - PullRequest
0 голосов
/ 23 декабря 2011

У меня есть несколько отзывов с датой, которая была создана, поэтому я хочу, чтобы эта дата составляла количество дней, а после - количество месяцев. это код, с которым я получаю дату:

NSDateFormatter * inputFormatter = [[NSDateFormatter alloc] init];
[inputFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss" ];

NSString * inputString = entry.createdAt;
NSDate * inputDate = [inputFormatter dateFromString:inputString];
double  timeInterval = [inputDate timeIntervalSinceNow];
dateLabel.text = [NSString stringWithFormat:@"%d",timeInterval];

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

Дни легко:

int days = timeInterval / (60.0 * 60.0 * 24.0); //< i.e. divide by seconds in a day

Месяцы сложнее. Вы хотите, чтобы это было действительно точно? Или будешь предполагать 30 дней в месяце? Если так, то это просто:

int months = timeInterval / (60.0 * 60.0 * 24.0 * 30.0); //< i.e. divide by seconds in a month

Чтобы обернуть все это вместе, вы можете сделать:

if (timeInterval < (60.0 * 60.0 * 24.0 * 30.0)) {
    dateLabel.text = [NSString stringWithFormat:@"%i days", (int)(timeInterval / (60.0 * 60.0 * 24.0))];
} else {
    dateLabel.text = [NSString stringWithFormat:@"%i months", (int)(timeInterval / (60.0 * 60.0 * 24.0 * 30.0))];
}

Это то, что вы хотите?

0 голосов
/ 23 декабря 2011

Вы должны посмотреть на NSCalendar компоненты: fromDate: toDate: параметры метод.

    NSDate *date = [[[NSDate alloc] init] autorelease];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];

    NSDateComponents *components = [calendar components:(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit) fromDate:date toDate:inputDate options:0];
    int years = [components year];
    int months = [components month];
    int days = [components day];
    NSLog(@"Start date: %@ End Date: %@", date, inputDate);
    NSLog(@"year: %i months: %i days: %i", years, months, days);
    [date release];
    [calendar release];
...