2013-08-26 131 views
1

在我的應用程序中,我有一個NSDate實例列表。在某一點上,我需要分離過去到今天的日期,即[NSDate date](早到12日) 而且我已經使用瞭如下的邏輯。我覺得必須有比這更好的邏輯,所以如果有更好的解決方案,請幫助我。過濾日期比今天早嗎?

我將日期實例作爲參數傳遞給此方法,該方法將返回與我的需求相對應的BOOL值。

-(BOOL)checkIfPast:(NSDate *)date 
{ 
    NSDate *today=[NSDate date]; 
    NSUInteger dateFlags = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit; 
    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components1=[gregorianCalendar components:dateFlags fromDate:today]; 
    NSDateComponents *components2=[gregorianCalendar components:dateFlags fromDate:date]; 
    if (components2.day-components1.day<0) { 
     return YES; 
    } 
    else 
    { 
     return NO; 
    } 
} 
+0

你必須至少也比較月,年(和時代)。以相反的順序進行。 –

+0

@NikolaiRuhe哦,我忘記你了 –

+0

最簡單的是今天12AM獲得一個NSDate值,然後比較NSDate值。 (請注意,必須根據您希望比較的時區調整NSDate值。) –

回答

2
BOOL checkIfTodayOrFuture(NSDate *date) 
{ 
    NSDate *now = [NSDate date]; 
    NSUInteger dateFlags = NSCalendarUnitEra | NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay; 
    NSCalendar *gregorianCalendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSDateComponents *components = [gregorianCalendar components:dateFlags fromDate:now]; 
    NSDate *midnight = [gregorianCalendar dateFromComponents:components]; 
    return [date compare:midnight] == NSOrderedDescending; 
} 

如果你必須做出大量的測試保持midnight四周,只是做的所有日期的compare:

請記住,結果不是恆定的。例如,用戶可能會更改她的時區,因此「今日」的時間間隔也會發生變化。

+0

未使用Xcode寫入。謹防。 –

1

NSDateearlierDate:方法

1

爲上午12點創建日期,並作出比較。結果表示asc或dsc。我認爲,ASC是一個你想