2011-12-21 8 views
4
私はメッセージの有効期限が切れているかどうかを確認するには、以下の機能を使用し

-iOS - 2回比較するには?

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

私は2つの異なる日付を比較しています場合、これは正常に動作します。ただし、今日のメッセージの有効期限が切れている場合はfalseを返します。どのように私はそれを修正するかもしれない上の任意のアイデア?

+1

これは起こりません。また、NSDateインスタンス間の差は1秒で十分です。そこに両方の​​日付の 'NSLog()'を追加して、それらが実際に異なっているかどうかを確認してください。 – Pascal

+0

あなたは正しいです。あなたがそれを答えに変えるなら、私はそれを受け入れることができます。 – Suchi

答えて

2

を使用し、

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

それとも2つの日付を比較したい場合になります:)

この必要がありますまた、NSDateインスタンス間で1秒の差があれば十分です。両方の日付がある場合は、NSLog()を追加して、実際に異なるかどうかを確認してください。

0

NSOrderedSameが同じ日であるかどうかを確認してください。たぶんあなたは別に時間を比較する必要があります。

2

あなたは

- (NSTimeInterval)timeIntervalSinceNow 

戻り値は、受信機と、現在の日付と時刻の間隔で現在の時刻と比較するNSDateクラスのシステムメソッドを使用することができます。レシーバが現在の日付と時刻より前の場合、戻り値は負の値になります。

だから、正しいコードが答えとして私のコメントを追加する(

- (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; 
    } 
}