过滤日期早于今天?

时间:2013-08-26 13:28:51

标签: ios objective-c nsdate

在我的应用程序中,我有一个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;
    }
}

3 个答案:

答案 0 :(得分: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:

请记住,结果不是恒定的。例如,用户可能会更改其时区,因此“今天”的间隔也会发生变化。

答案 1 :(得分:1)

请参阅NSDate的{​​{1}}方法

答案 2 :(得分:1)

创建12Am的日期并进行比较。结果说asc或dsc。我认为asc是你想要的那个