Как отобразить yesterDay (относительно даты, но не временного интервала в 24 часа) посещенных элементов в задании iPhone c - PullRequest
3 голосов
/ 10 января 2012

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

     NSDate *date = self.lastviewed;
                double time = [date timeIntervalSinceNow];

                NSString *tmpValue = nil;
                time *= -1;


                if(time < 3600*24) {
                    tmpValue = @"Today";
                }

                else {
                    int div = round(time / 60 / 60 / 24);

             // I want solution wth respect to yesterday's date date but not as follows
                     if(div == 1)
                          tmpvalue = @ "Yester Day";


                if (div >1 && div <7)
                        //tmpValue= [NSString stringWithFormat:@"%d days ago", div];
                        tmpValue = @"This Week";

                    else if(div <30)
                        tmpValue = @"This Month";
                    else 
                        tmpValue = @"Earlier"; 
                } 

заранее спасибо ..

Ответы [ 3 ]

4 голосов
/ 10 января 2012

Вы должны использовать NSDateComponents при работе с датами.Он будет обрабатывать такие вещи, как летнее время и т. Д. Есть много вопросов о StackOverflow на NSDate, например, этот можно использовать для решения вашей проблемы, изменив компонент даты на -1 день.

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDate *today = [NSDate date];

NSDateComponents *dayComponent = [[NSDateComponents alloc] init];
dayComponent.day = -1;
NSDate *yesterday = [gregorian dateByAddingComponents:dayComponent 
                                               toDate:today 
                                              options:0];
2 голосов
/ 10 января 2012

Я думаю, вам нужно изменить не только случай "Вчера", но и другие расчеты для месяца, года и недели.

NSDate *date = self.lastviewed;
// double time = [date timeIntervalSinceNow];
NSCalendar *currentCalendar = [NSCalendar currentCalendar];
NSDateComponents * componentsOfDate = [currentCalendar 
                                        components: (NSYearCalendarUnit|NSMonthCalendarUnit|
                                                   NSDayCalendarUnit|NSWeekCalendarUnit)
                                       fromDate:date];
NSDateComponents * componentsOfToday = [currentCalendar 
                                         components:(NSYearCalendarUnit|NSMonthCalendarUnit|
                                         NSDayCalendarUnit|NSWeekCalendarUnit) 
                                       fromDate:[NSDate date]];

if ([componensOfDate year] == [componentsOfToday year])
    if ([componentsOfDate month] == [componentsOfToday month])
        if([componentsOfDate day] == [componentsOfToday day])
            tmpvalue = @"Today" ;
         else
             tmpvalue = @"This Month" ;
    else
        tmpvalue = @"This Year" ;

// This week calculation, the easy way.
if([componentsOfDate week] == [componentsOfToday week] && 
   abs([date timeIntervalSinceNow]) <= (7*24*60*60))
    tmpvalue = @"This Week" ;

// Yesterday calculation
NSDate * yesterday = [NSDate dateWithTimeInterval:(-24*7*60*60) sinceDate:[NSDate date]];
NSComponents *componentsOfYesterday = [currentCalendar 
                                        components: (NSYearCalendarUnit|NSMonthCalendarUnit|
                                                   NSDayCalendarUnit)
                                       fromDate:yesterday];

// check this, as I'm not sure you can use compare: on components object
if([componentsOfDate compare:componentsOfYesterday] == NSOrderedSame)
  tmpvalue = @"Yesterday";
0 голосов
/ 10 января 2012

Было бы проще, если бы вы использовали NSCalendar для получения единиц дня и месяца.

См. это и это для некоторых примеров.

Если вы получите день, месячные единицы измерения для текущего дня и заданного дня последнего просмотра, вы можете найти необходимые значения, сравнив оба значения.

Изменить:

NSDate *todate = [NSDate date];
NSDate *lastViewedDate = self.lastviewed; 

NSCalendar *gregorian = [[NSCalendar alloc] 
                         initWithCalendarIdentifier:NSGregorianCalendar]; 

NSUInteger unitFlags = NSMonthCalendarUnit | NSDayCalendarUnit; 

NSDateComponents *components = [gregorian components:unitFlags 
                                            fromDate:lastViewedDate 
                                              toDate:todate options:0]; 
NSInteger months = [components month]; 
NSInteger days = [components day]; 

NSString *tmpValue = nil;

if ( days == 0 ) {
    tmpValue = @"Today";
}
else
{
    if(days == 1)
        tmpValue = @"Yesterday";

    else if (days >1 && days <7)
        //tmpValue= [NSString stringWithFormat:@"%d days ago", div];
        tmpValue = @"This Week";

    else if(days <30)
        tmpValue = @"This Month";
    else 
        tmpValue = @"Earlier";
}
...