每天比较两个NSDate

时间:2015-04-21 19:16:03

标签: objective-c nsdate

我有两个NSDate个对象,dateOnedateTwo。如果dateTwo晚于dateone,但与dateOne同一天(例如,2015年1月1日下午4:00和2015年1月1日下午5:00),那么我想要返回他们是一样的。但是,只要dateTwo在第二天或更晚(例如,2015年1月1日和2015年1月2日),我就要返回dateOne< dateTwo

我目前正试图通过以下方式实现这一目标:

- (BOOL)dateTwoLaterThanDateOne:(NSDate *)dateOne withDateTwo:(NSDate *)dateTwo {
    if([dateTwo compare: dateOne] == NSOrderedDescending) // if dateTwo is later in time than dateOne
    {
        return YES;
    }
    return NO;
}

3 个答案:

答案 0 :(得分:0)

您可以从每个组件中获取日期组件并进行比较。类似的东西:

NSDateComponents *components = [[NSCalendar currentCalendar] components:NSCalendarUnitDay | NSCalendarUnitMonth | NSCalendarUnitYear fromDate:[NSDate date]];

NSInteger day = [components day];

对两个日期都这样做,然后进行比较。

答案 1 :(得分:0)

检查它是否与NSDateComponents同一天。

如果它不比较它们,看它们是否上升或下降。

- (BOOL)dateTwoLaterThanDateOne:(NSDate *)dateOne withDateTwo:(NSDate *)dateTwo
{
    NSCalendar* calendar = [NSCalendar currentCalendar];

    unsigned unitFlags = NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay;
    NSDateComponents* comp1 = [calendar components:unitFlags fromDate:dateOne];
    NSDateComponents* comp2 = [calendar components:unitFlags fromDate:dateTwo];
    BOOL sameDay = [comp1 day]  == [comp2 day] && [comp1 month] == [comp2 month] && [comp1 year]  == [comp2 year] ;

   return sameDay ? !sameDay : ([dateOne compare:dateTwo] == NSOrderedAscending);

}

答案 2 :(得分:0)

使用此代码..

NSTimeInterval secondsBetween = [dateTwo timeIntervalSinceDate: dateOne]; 
int numberOfDays = secondsBetween /(3600*24);

if (numberOfDays == 0) {
        NSLog(@"same day"); //dateOne = dateTwo
}else if (numberOfDays>0){
        NSLog(@"two > one"); //dateOne > dateTwo
}else if (numberOfDays<0){
        NSLog(@"two < one"); //dateOne < dateTwo
}

此代码可以帮助您:)