2011-12-21 3 views
4

utiliser la fonction suivante pour vérifier si un message a expiré -iOS - comment comparer deux fois?

- (BOOL) hasExpired:(NSDate*)myDate 
{  
    if(myDate == nil) 
    { 
     return false; 
    } 
    NSDate *now = [NSDate date]; 
    return !([now compare:myDate] == NSOrderedAscending); 
} 

Cela fonctionne bien si je compare deux dates différentes. Cependant, il renvoie false si le message a expiré plus tôt dans la journée aujourd'hui. Des idées sur comment je pourrais le réparer?

+1

Cela ne devrait pas arriver, aussi une différence de 1 seconde entre les instances NSDate est suffisante. Ajoutez un 'NSLog()' avec les deux dates pour voir si elles sont différentes. – Pascal

+0

Vous aviez raison. Si vous le transformez en une réponse, je pourrais l'accepter. – Suchi

Répondre

2

(Ajouter mon commentaire comme une réponse :)

Cela devrait pas arriver, aussi 1 seconde différence entre NSDate instances est suffisant. Ajoutez un NSLog() avec les deux dates pour voir si elles sont vraiment différentes.

0

Vérifiez s'il retourne NSOrderedSame lorsqu'il est le même jour. Peut-être avez-vous besoin de comparer l'heure aussi, séparément.

2

Vous pouvez utiliser la méthode du système de classe NSDate pour comparer avec le temps actuel

- (NSTimeInterval)timeIntervalSinceNow 

Valeur de retour est l'intervalle entre le récepteur et la date et l'heure. Si le destinataire est antérieur à la date et à l'heure actuelles, la valeur de retour est négative.

Code sera donc correct

- (BOOL) hasExpired:(NSDate*)myDate 
{ 
    return [myDate timeIntervalSinceNow] < 0.f; 
} 

Ou si vous voulez comparer 2 dates, utilisez

- (NSTimeInterval)timeIntervalSinceDate:(NSDate *)anotherDate 
1
+(BOOL)isEndDateBigger :(NSDate *)currDate :(NSDate *)endDate { 
    if ([currDate compare:endDate] == NSOrderedDescending) { 
    NSLog(@"date1 is later than date2"); 
    return YES; 
    } else if ([currDate compare:endDate] == NSOrderedAscending) { 
    return NO; 
    } else { 
    return NO; 
    } 
}