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

3 回答 3

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

如果您必须进行大量测试,请保留midnightcompare:在所有日期进行。

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

于 2013-08-26T13:36:42.923 回答
1

NSDateearlierDate:方法

于 2013-08-26T13:34:09.210 回答
1

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

于 2013-08-26T13:35:22.543 回答